{"id":16573366,"url":"https://github.com/zoomoid/demo-man","last_synced_at":"2025-08-18T06:33:22.940Z","repository":{"id":37674092,"uuid":"254400065","full_name":"zoomoid/demo-man","owner":"zoomoid","description":"demo-man provides your listeners with fresh tunes with just a PUT of a button","archived":false,"fork":false,"pushed_at":"2025-08-11T10:53:07.000Z","size":233792,"stargazers_count":1,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-08-11T12:30:20.424Z","etag":null,"topics":["microservices"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","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/zoomoid.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,"zenodo":null}},"created_at":"2020-04-09T14:51:40.000Z","updated_at":"2025-08-11T10:53:05.000Z","dependencies_parsed_at":"2024-04-22T07:43:19.246Z","dependency_job_id":"43e1faa8-b47a-47d6-89f1-25ed028c5b7a","html_url":"https://github.com/zoomoid/demo-man","commit_stats":{"total_commits":677,"total_committers":2,"mean_commits":338.5,"dds":0.1669128508124077,"last_synced_commit":"3abd5867b01755d4171b3913226209af76ad8a37"},"previous_names":[],"tags_count":133,"template":false,"template_full_name":null,"purl":"pkg:github/zoomoid/demo-man","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zoomoid%2Fdemo-man","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zoomoid%2Fdemo-man/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zoomoid%2Fdemo-man/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zoomoid%2Fdemo-man/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zoomoid","download_url":"https://codeload.github.com/zoomoid/demo-man/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zoomoid%2Fdemo-man/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":270954982,"owners_count":24674806,"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","status":"online","status_checked_at":"2025-08-18T02:00:08.743Z","response_time":89,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["microservices"],"created_at":"2024-10-11T21:41:59.785Z","updated_at":"2025-08-18T06:33:22.458Z","avatar_url":"https://github.com/zoomoid.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Demo Man - a cloud-native demo audio provider \n\ndemo-man is a micro-service architecture for rapidly providing new demo tracks.\n\nThe four main components of the architecture are \n\n1.  **waveman**: Creates beautiful audio waveforms from the mp3s uploaded to\n    display a visual progress indicator on the client. This project is branched\n    off of \u003chttps://github.com/occloxium/wave-man\u003e and a lot faster, but also\n    not as versatile.\n2.  **watchdog**: Watching a local file system mounted into the container\n    containing demo audio files. When a new file is created or a new directory\n    is created, the watchdog triggers an event to add the new resources to the\n    API server and storage.\n3.  **api**: The API Server provides RESTful endpoints to get, add and remove\n    resources from (to) a MongoDB back-end storage.\n4.  **client**: The client is the usual front-end that queries the API server\n    for tracks and albums\n\nAll of this is backed by a MongoDB running for the API Server to provide\nconsistent storage for the resources, as well as a deployed NGINX to serve audio\nfiles and an SFTP server to upload the audio files from anywhere with an SFTP\nclient.\n\n## Resource Concepts\n\nThe entire project evolves around the two key resources, `Namespaces` and\n`Tracks`. Namespaces are correspondent to a named directory in the root\ndirectory of the volume the fileserver/SFTP server runs in.\nTracks are the metadata read off of an MP3 added to a namespace. Furthermore, \nTracks can (and should) have linked `Waveform` resources. These waveforms\ncontain the SVG code to render the waveforms in the client view.\n\nAll API routes are scoped around these resources.\n\n## Building\n\nBuild the docker images for `api/`, `client/`, `waveman/` and `watchdog/` and\nadapt the k8s YAMLs accordingly. Note that you also might need to adapt any sort\nof volume mounts created to fit to your own Kubernetes cluster and storage\nprovider.\n\nUse the provided Makefile with the according recipes to build the containers.\n\n## Deployment\n\nSee [k8s/README](./k8s/README.md) for notes on how to deploy the services using\nKubernetes.\n\nAlternatively, you can run the platform in development mode using the\ndocker-compose file provided in [testing/](./testing/docker-compose.yaml). Keep\nin mind that this requires the project to be fully runnable locally (i.e. all\nrequired packages installed), as the node_module folders of each component are\nmounted into the containers created by docker-compose in order to make\ndevelopment easier and not having to build the containers from scratch each time\nsomething changes.\n\nTherefore, we recommend deploying the demo-man using Kubernetes.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzoomoid%2Fdemo-man","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzoomoid%2Fdemo-man","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzoomoid%2Fdemo-man/lists"}