{"id":15145861,"url":"https://github.com/andreapavoni/robo_radio_rs","last_synced_at":"2026-02-07T12:31:44.865Z","repository":{"id":136327999,"uuid":"537454587","full_name":"andreapavoni/robo_radio_rs","owner":"andreapavoni","description":"A Rust implementation of https://radio.pavonz.com","archived":false,"fork":false,"pushed_at":"2022-10-24T15:41:08.000Z","size":193,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-07-29T23:14:52.645Z","etag":null,"topics":["music","rust","soundcloud-api","websockets"],"latest_commit_sha":null,"homepage":"","language":"Rust","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/andreapavoni.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":"2022-09-16T12:46:26.000Z","updated_at":"2023-09-26T07:40:29.000Z","dependencies_parsed_at":null,"dependency_job_id":"74d13fe7-f1b3-4f15-8093-86745ff8da95","html_url":"https://github.com/andreapavoni/robo_radio_rs","commit_stats":{"total_commits":56,"total_committers":1,"mean_commits":56.0,"dds":0.0,"last_synced_commit":"346b601439bb242c200520cc8f76281c35ca1ae6"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/andreapavoni/robo_radio_rs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andreapavoni%2Frobo_radio_rs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andreapavoni%2Frobo_radio_rs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andreapavoni%2Frobo_radio_rs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andreapavoni%2Frobo_radio_rs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/andreapavoni","download_url":"https://codeload.github.com/andreapavoni/robo_radio_rs/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andreapavoni%2Frobo_radio_rs/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29194019,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-07T07:37:03.739Z","status":"ssl_error","status_checked_at":"2026-02-07T07:37:03.029Z","response_time":63,"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":["music","rust","soundcloud-api","websockets"],"created_at":"2024-09-26T11:43:20.418Z","updated_at":"2026-02-07T12:31:44.849Z","avatar_url":"https://github.com/andreapavoni.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# RoboRadio\n\n## What is this\n\nA Rust implementation of https://radio.pavonz.com (originally built with Elixir and Phoenix, still not open sourced yet). It works like a real radio: you turn it on (well, in this case, you open the web page) and you'll listen what's being played at the exact point. The radio goes on automagically.\n\n## How it works\n\nRoboRadio loads a playlist from https://soundcloud.com, shuffles the tracks, for each one it will play the song and notify the connected users through websockets. When the songs in the playlist have been all played, it reloads and shuffle the tracks again.\n\n## How to run RoboRadio\n\n### Locally\n\n- clone the repository and run:\n  ```sh\n  $ cd frontend \u0026\u0026 npm install \u0026\u0026 cd ..\n  $ cargo make frontend\n  $ cargo run\n  ```\n- or use the `Dockerfile.default` to build a container and run it throught Docker (or Podman). The app will listen on port `8080`. There's a `.env.dist` file with usable ENV settings.\n\n### Deploy\n\nUse the `Dockerfile` included in this repository for a basic deploy, or adjust if needed. After some weeks of testing, I decided to deploy as the official RoboRadio in place of the Elixir one.\n\n## Current status\n\n- [x] add soundcloud API client\n  - [x] fetch playlist info\n  - [x] fetch track info\n  - [x] fetch track stream\n- [x] media player\n  - [x] load playlist and randomize its tracks\n  - [x] rotate to next track (or reload playlist again)\n- [x] http server\n  - [x] wrap app-state\n  - [x] serve static assets\n  - [x] websockets\n    - [x] keep track of current listeners\n    - [x] broadcast new track when last one's duration has elapsed\n- [x] logging/tracing\n- [x] improved error handling (`anyhow` + `thiserror` ?)\n- [x] auto-update soundcloud's `client_id`\n- [ ] testing (mocks for external API calls)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandreapavoni%2Frobo_radio_rs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fandreapavoni%2Frobo_radio_rs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandreapavoni%2Frobo_radio_rs/lists"}