{"id":50103509,"url":"https://github.com/iam-subrat/the-music-one","last_synced_at":"2026-05-23T09:01:13.997Z","repository":{"id":355025435,"uuid":"1226467757","full_name":"iam-subrat/the-music-one","owner":"iam-subrat","description":"Universal music link converter + real-time jam sessions. Spotify, Apple Music, YouTube \u0026 more.","archived":false,"fork":false,"pushed_at":"2026-05-17T18:47:39.000Z","size":549,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-17T20:43:27.878Z","etag":null,"topics":["cross-platform","cross-platform-music-player","docker-compose","fastapi","google-oauth2","google-youtube-api","group-music","jam-sessions","javascript","music","music-player","odesli","postgres","python","react","song","song-queue","supabase"],"latest_commit_sha":null,"homepage":"https://themusic.one","language":"Python","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/iam-subrat.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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-01T12:43:44.000Z","updated_at":"2026-05-16T12:36:30.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/iam-subrat/the-music-one","commit_stats":null,"previous_names":["iam-subrat/the-music-one"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/iam-subrat/the-music-one","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iam-subrat%2Fthe-music-one","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iam-subrat%2Fthe-music-one/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iam-subrat%2Fthe-music-one/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iam-subrat%2Fthe-music-one/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/iam-subrat","download_url":"https://codeload.github.com/iam-subrat/the-music-one/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iam-subrat%2Fthe-music-one/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33389229,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-23T04:15:53.637Z","status":"ssl_error","status_checked_at":"2026-05-23T04:15:53.242Z","response_time":53,"last_error":"SSL_read: 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":["cross-platform","cross-platform-music-player","docker-compose","fastapi","google-oauth2","google-youtube-api","group-music","jam-sessions","javascript","music","music-player","odesli","postgres","python","react","song","song-queue","supabase"],"created_at":"2026-05-23T09:00:50.742Z","updated_at":"2026-05-23T09:01:13.982Z","avatar_url":"https://github.com/iam-subrat.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# MusicOne\n\nPaste any music streaming URL → get search links for every platform. Includes real-time group listening rooms (Jam Sessions).\n\n**Supported platforms:** Spotify · Apple Music · YouTube Music · Amazon Music · Tidal · Deezer · SoundCloud · JioSaavn · Gaana\n\n---\n\n## Monorepo layout\n\n```\nui/    React 18 + Vite SPA (GitHub Pages / Cloudflare Pages)\napi/   FastAPI backend + Alembic migrations (Supabase Postgres)\n```\n\n---\n\n## Local development\n\n### API\n\n```bash\ncd api\ncp .env.example .env        # fill in Supabase credentials\nuv sync\nuv run alembic upgrade head # run migrations\nuv run uvicorn app.main:app --reload\n# → http://localhost:8000\n```\n\n### UI\n\n```bash\ncd ui\ncp .env.local.example .env.local   # fill in Supabase credentials\nnpm install\nnpm run dev\n# → http://localhost:5173\n# /api requests proxied to localhost:8000 via vite.config.js\n```\n\n---\n\n## Database migrations\n\nMigrations live in `api/migrations/versions/`. Managed by [Alembic](https://alembic.sqlalchemy.org/).\n\n```bash\ncd api\n\n# Apply all pending migrations\nuv run alembic upgrade head\n\n# Create a new migration (after changing models)\nuv run alembic revision --autogenerate -m \"describe the change\"\n\n# Check current revision\nuv run alembic current\n```\n\n---\n\n## Environments\n\n| Environment | Branch    | DB              | UI host              |\n|-------------|-----------|-----------------|----------------------|\n| UAT         | `uat`     | Supabase (UAT)  | Cloudflare Pages     |\n| Staging     | `staging` | Supabase (stg)  | Cloudflare Pages     |\n| Production  | `main`    | Supabase (prod) | GitHub Pages         |\n\nEach environment has its own GitHub Actions environment with secrets. Migrations run automatically before each deploy.\n\n### GitHub environment secrets required\n\n| Secret | Description |\n|--------|-------------|\n| `DATABASE_URL` | `postgresql+asyncpg://postgres:\u003cpw\u003e@db.\u003cref\u003e.supabase.co:5432/postgres` |\n| `SUPABASE_URL` | Supabase project URL |\n| `SUPABASE_ANON_KEY` | Supabase anon key |\n| `SUPABASE_JWT_SECRET` | JWT secret (Settings → API → JWT) |\n| `VITE_SUPABASE_URL` | Same as SUPABASE_URL (Vite build) |\n| `VITE_SUPABASE_ANON_KEY` | Same as SUPABASE_ANON_KEY (Vite build) |\n| `VITE_API_URL` | Public API base URL |\n| `YOUTUBE_API_KEY` | YouTube Data API v3 key (console.cloud.google.com) |\n| `ODESLI_API_KEY` | Odesli song lookup key _(optional — raises rate limit)_ |\n| `CLOUDFLARE_API_TOKEN` | For Pages deploys (UAT + staging) |\n| `CLOUDFLARE_ACCOUNT_ID` | Cloudflare account (UAT + staging) |\n\n| Variable | Description |\n|----------|-------------|\n| `CLOUDFLARE_PROJECT_NAME` | Cloudflare Pages project name |\n| `CNAME_DOMAIN` | Custom domain for GitHub Pages (prod only) |\n\n---\n\n## CI/CD\n\nPush to a branch → GitHub Actions runs `migrate` job then `deploy` job:\n\n1. `migrate` — installs uv, runs `alembic upgrade head` against the environment's Supabase DB\n2. `deploy` — builds the Vite app, deploys to Cloudflare Pages (UAT/staging) or GitHub Pages (prod)\n\nMigration 001 is fully idempotent — safe to run against existing databases.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fiam-subrat%2Fthe-music-one","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fiam-subrat%2Fthe-music-one","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fiam-subrat%2Fthe-music-one/lists"}