{"id":51540519,"url":"https://github.com/aritrac1/lyrixtube","last_synced_at":"2026-07-09T13:01:39.709Z","repository":{"id":358820597,"uuid":"1142594657","full_name":"AritraC1/LyrixTube","owner":"AritraC1","description":"LyrixTube is a full-stack application that extracts song information from YouTube music links and retrieves accurate lyrics using the Genius Lyrics API.  Built with Flutter for a beautiful UI and Node.js/Express for a robust backend.","archived":false,"fork":false,"pushed_at":"2026-05-19T06:42:36.000Z","size":511,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-19T09:09:53.750Z","etag":null,"topics":["android","dart","dio","docker","docker-compose","expressjs","flutter","full-stack-app-development","genius-api","ios","javascript","lyrics-generator","mobile-app","nodejs","provider","provider-state-management","youtube-music-lyrics-generator"],"latest_commit_sha":null,"homepage":"","language":"Dart","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/AritraC1.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-01-26T16:02:42.000Z","updated_at":"2026-05-19T06:43:09.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/AritraC1/LyrixTube","commit_stats":null,"previous_names":["aritrac1/lyrixtube"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/AritraC1/LyrixTube","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AritraC1%2FLyrixTube","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AritraC1%2FLyrixTube/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AritraC1%2FLyrixTube/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AritraC1%2FLyrixTube/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AritraC1","download_url":"https://codeload.github.com/AritraC1/LyrixTube/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AritraC1%2FLyrixTube/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35299763,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-09T02:00:07.329Z","response_time":57,"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":["android","dart","dio","docker","docker-compose","expressjs","flutter","full-stack-app-development","genius-api","ios","javascript","lyrics-generator","mobile-app","nodejs","provider","provider-state-management","youtube-music-lyrics-generator"],"created_at":"2026-07-09T13:01:37.787Z","updated_at":"2026-07-09T13:01:39.696Z","avatar_url":"https://github.com/AritraC1.png","language":"Dart","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🎵 LyrixTube\n\n\u003e A full-stack lyrics lookup app that generates song lyrics from YouTube music links.\n\nLyrixTube combines a Flutter mobile frontend with a Node.js/Express backend. The backend extracts metadata from YouTube URLs, searches Genius for lyrics, formats them, and caches results in MongoDB.\n\n## ✨ What’s Included\n\n- 🎬 YouTube song metadata extraction using `play-dl`\n- 📝 Lyrics lookup with `genius-lyrics`\n- 🧠 MongoDB caching layer for repeated searches\n- 📱 Flutter UI with Provider state management and Dio HTTP client\n- 🐳 Docker Compose setup for backend + MongoDB\n- 🧪 Jest backend tests with Supertest\n\n## 🛠️ Tech Stack\n\n### Frontend\n- Flutter\n- Dart\n- Provider\n- Dio\n- Shimmer\n\n### Backend\n- Node.js\n- Express\n- MongoDB / Mongoose\n- Genius Lyrics API\n- play-dl\n- CORS\n- dotenv\n\n## Demo\n\n| Home                                               | Lyrics                                              |\n| -------------------------------------------------- | --------------------------------------------------- |\n| \u003cimg src=\"demo/screen1.png\" width=\"250\" alt=\"Home screen\" /\u003e | \u003cimg src=\"demo/screen2.png\" width=\"250\" alt=\"Lyrics screen\" /\u003e |\n\n## 📋 Project Structure\n\n```\nLyrixTube/\n├── lyrix_tube_app/           # Flutter frontend\n│   ├── lib/\n│   │   ├── main.dart\n│   │   ├── provider/          # app state\n│   │   └── screen/            # UI screens\n│   ├── android/\n│   ├── ios/\n│   └── pubspec.yaml\n├── server/                   # Node.js backend\n│   ├── Dockerfile\n│   ├── .env.example\n│   ├── index.js\n│   ├── app.js\n│   ├── config/db.js\n│   ├── controllers/\n│   ├── routes/\n│   ├── services/\n│   ├── models/\n│   └── utils/\n├── docker-compose.yml        # backend + MongoDB orchestration\n└── README.md                 # this file\n```\n\n## 🚀 Getting Started\n\n### Prerequisites\n\n- Flutter 3.6.0+\n- Node.js 14+\n- npm or yarn\n- Docker \u0026 Docker Compose (optional, recommended for backend)\n\n### 1. Clone the repository\n\n```bash\ngit clone https://github.com/AritraC1/LyrixTube.git\ncd LyrixTube\n```\n\n### 2. Backend setup\n\n```bash\ncd server\nnpm install\ncp .env.example .env\n```\n\nEdit `server/.env` and set:\n\n```env\nPORT=3000\nGENIUS_TOKEN=your_genius_api_key\nMONGO_INITDB_ROOT_USERNAME=admin\nMONGO_INITDB_ROOT_PASSWORD=your_mongo_super_secret_password\nMONGO_INITDB_DATABASE=lyrixtube\nMONGO_URI=mongodb://admin:your_mongo_super_secret_password@mongo:27017/your_database_name?authSource=admin\n```\n\nStart the backend locally:\n\n```bash\nnpm start\n```\n\nThe backend will run on `http://localhost:3000`.\n\n### 3. Frontend setup\n\n```bash\ncd ../lyrix_tube_app\nflutter pub get\nflutter run\n```\n\n## 🐳 Docker Setup\n\nThe backend and MongoDB are orchestrated with Docker Compose.\n\n### Start services\n\n```bash\ndocker compose up --build -d\n```\n\n### Verify services\n\n```bash\ndocker compose ps\ncurl http://localhost:3001/health\ncurl http://localhost:3001/db-health\n```\n\n### Stop services\n\n```bash\ndocker compose down\n```\n\n## 🔌 API Endpoints\n\n### Health\n\n- `GET /health` — service health status\n- `GET /db-health` — MongoDB connection status\n\n### Lyrics\n\n- `POST /api/generate-lyrics`\n\nRequest body:\n\n```json\n{\n  \"link\": \"https://www.youtube.com/watch?v=dQw4w9WgXcQ\"\n}\n```\n\nSuccess response:\n\n```json\n{\n  \"status\": \"success\",\n  \"data\": {\n    \"song\": \"Never Gonna Give You Up\",\n    \"artist\": \"Rick Astley\",\n    \"lyrics\": \"[Chorus]\\nNever gonna give you up...\"\n  }\n}\n```\n\nError response:\n\n```json\n{\n  \"status\": \"error\",\n  \"message\": \"...\"\n}\n```\n\n## 🧠 Backend behavior\n\n- Validates YouTube video URLs using `play-dl`\n- Extracts artist and song names from video titles\n- Searches Genius for the best lyrics match\n- Filters out junk or translation results\n- Formats lyrics and caches them in MongoDB\n- Increments `search_count` for repeated lookups\n\n## 🧪 Testing\n\nRun backend tests:\n\n```bash\ncd server\nnpm test\n```\n\n## 🔐 Environment variables\n\nCopy `server/.env.example` to `server/.env` and configure values.\n\n- `PORT` — backend port\n- `GENIUS_TOKEN` — Genius API token\n- `MONGO_URI` — MongoDB URI\n- `MONGO_INITDB_ROOT_USERNAME` — MongoDB root user\n- `MONGO_INITDB_ROOT_PASSWORD` — MongoDB root password\n- `MONGO_INITDB_DATABASE` — database name\n\n## 📁 Notes\n\n- The Flutter app is not containerized in this repository.\n- MongoDB is used for caching lyrics and improving repeated requests.\n- Docker Compose maps host port `3001` to the backend container port `3000`.\n\n---","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faritrac1%2Flyrixtube","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faritrac1%2Flyrixtube","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faritrac1%2Flyrixtube/lists"}