{"id":22209398,"url":"https://github.com/poulastaadas/kyoku","last_synced_at":"2025-07-27T09:31:11.526Z","repository":{"id":209325999,"uuid":"723423478","full_name":"POULASTAAdAS/Kyoku","owner":"POULASTAAdAS","description":"A music streaming application like Spotify  with onw database entry over 70 thousand","archived":false,"fork":false,"pushed_at":"2024-12-02T16:18:43.000Z","size":67247,"stargazers_count":5,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"dev","last_synced_at":"2024-12-02T17:28:52.262Z","etag":null,"topics":["android-application","android-music-player","api","google-authentication","hls","jetpack","jetpack-compose","jwt-authentication","kotlin-android","ktor-server","music-app","music-downloader","music-player","music-streaming","passkey","server"],"latest_commit_sha":null,"homepage":"","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/POULASTAAdAS.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":"2023-11-25T16:12:45.000Z","updated_at":"2024-12-02T16:18:47.000Z","dependencies_parsed_at":"2024-04-22T09:55:14.102Z","dependency_job_id":"c378e6aa-787f-467b-9301-c55a36dc9e8b","html_url":"https://github.com/POULASTAAdAS/Kyoku","commit_stats":null,"previous_names":["poulastaadas/music-streaming-app","poulastaadas/kyoku"],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/POULASTAAdAS%2FKyoku","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/POULASTAAdAS%2FKyoku/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/POULASTAAdAS%2FKyoku/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/POULASTAAdAS%2FKyoku/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/POULASTAAdAS","download_url":"https://codeload.github.com/POULASTAAdAS/Kyoku/tar.gz/refs/heads/dev","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":227789270,"owners_count":17820174,"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":["android-application","android-music-player","api","google-authentication","hls","jetpack","jetpack-compose","jwt-authentication","kotlin-android","ktor-server","music-app","music-downloader","music-player","music-streaming","passkey","server"],"created_at":"2024-12-02T19:30:07.213Z","updated_at":"2025-07-27T09:31:11.521Z","avatar_url":"https://github.com/POULASTAAdAS.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# \u003ch1  align='center'\u003eKyoku\u003c/h1\u003e\n\n## \u003ch2  align='center'\u003eShowcase\u003c/h2\u003e\n\n\u003ca  href=\"https://github.com/POULASTAAdAS/Kyoku/blob/dev/ss/kyoku%20showcase.svg\"\u003e\n\n\u003cimg  src=\"https://github.com/POULASTAAdAS/Kyoku/blob/dev/ss/kyoku%20showcase.svg\"  alt=\"ShowCase\"\u003e\n\n\u003c/a\u003e\n\n---\n\n**Design Link -** [Figma](https://www.figma.com/design/9P5gHYSzu2LtQocpmQ0dBF/Kyoku?node-id=0-1\u0026t=2KhBi5HUyz2zrDJk-1)\n\n---\n\n## \u003ch2  align='center'\u003eDescription\u003c/h2\u003e\n\n\u003e Kyoku is a music streaming application like Spotify or apple music\n\u003e It is using HLS protocol to stream music with a backed build using ktor and the application is build using jetpack compose library.\n\u003e With over 70 thousand+ songs to play\n\n## \u003ch2  align='center'\u003ePreview\u003c/h2\u003e\n\n### Compact\n\n\u003ca href=\"https://github.com/POULASTAAdAS/Kyoku/blob/dev/ss/dark/compat/google%20auth.gif\"\u003e\n    \u003cimg src=\"https://github.com/POULASTAAdAS/Kyoku/blob/dev/ss/dark/compat/google%20auth.gif\" width=\"200\" height=\"400\" alt=\"Auth Preview\"\u003e\n\u003c/a\u003e\n\u003ca href=\"https://github.com/POULASTAAdAS/Kyoku/blob/dev/ss/dark/compat/import%20playlist.gif\"\u003e\n    \u003cimg src=\"https://github.com/POULASTAAdAS/Kyoku/blob/dev/ss/dark/compat/import%20playlist.gif\" width=\"200\" height=\"400\" alt=\"Import Playlist\"\u003e\n\u003c/a\u003e\n\u003ca href=\"https://github.com/POULASTAAdAS/Kyoku/blob/dev/ss/dark/compat/select%20genre.gif\"\u003e\n    \u003cimg src=\"https://github.com/POULASTAAdAS/Kyoku/blob/dev/ss/dark/compat/select%20genre.gif\" width=\"200\" height=\"400\" alt=\"Select Genre\"\u003e\n\u003c/a\u003e\n\u003ca href=\"https://github.com/POULASTAAdAS/Kyoku/blob/dev/ss/dark/compat/select%20artist.gif\"\u003e\n    \u003cimg src=\"https://github.com/POULASTAAdAS/Kyoku/blob/dev/ss/dark/compat/select%20artist.gif\" width=\"200\" height=\"400\" alt=\"Select Artist\"\u003e\n\u003c/a\u003e\n\n### Expanded\n\n\u003ca href=\"https://github.com/POULASTAAdAS/Kyoku/blob/dev/ss/light/extended/email%20auth.gif\"\u003e\n    \u003cimg src=\"https://github.com/POULASTAAdAS/Kyoku/blob/dev/ss/light/extended/email%20auth.gif\" width=\"400\" height=\"230\" alt=\"Auth Preview\"\u003e\n\u003c/a\u003e\n\u003ca href=\"https://github.com/POULASTAAdAS/Kyoku/blob/dev/ss/light/extended/import%20playlist.gif\"\u003e\n    \u003cimg src=\"https://github.com/POULASTAAdAS/Kyoku/blob/dev/ss/light/extended/import%20playlist.gif\" width=\"400\" height=\"230\" alt=\"Import Playlist\"\u003e\n\u003c/a\u003e\n\u003ca href=\"https://github.com/POULASTAAdAS/Kyoku/blob/dev/ss/light/extended/select%20genre.gif\"\u003e\n    \u003cimg src=\"https://github.com/POULASTAAdAS/Kyoku/blob/dev/ss/light/extended/select%20genre.gif\" width=\"400\" height=\"230\" alt=\"Select Genre\"\u003e\n\u003c/a\u003e\n\u003ca href=\"https://github.com/POULASTAAdAS/Kyoku/blob/dev/ss/light/extended/select%20artist.gif\"\u003e\n    \u003cimg src=\"https://github.com/POULASTAAdAS/Kyoku/blob/dev/ss/light/extended/select%20artist.gif\" width=\"400\" height=\"230\" alt=\"Select Artist\"\u003e\n\u003c/a\u003e\n\n\u003cbr\u003e\n\u003cbr\u003e\n\n## \u003ch2  align='center'\u003eFeatures\u003c/h2\u003e\n\n- Supports Every Screen size\n- Authentication using google and email\n- Auto Sync data with backend on each device\n\n## \u003ch2  align='center'\u003eTechnology\u003c/h2\u003e\n\n| **Client**                                                                                                                                                                           | **Server**                                                     |\n| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------- |\n| [Jetpack Compose](https://developer.android.com/jetpack?gad_source=1\u0026gclid=CjwKCAiAzba9BhBhEiwA7glbanDtWkSrUjunIXb3dKY88xH_WZeZrqg99eS59XMENKk_SXU_buOVqRoClmEQAvD_BwE\u0026gclsrc=aw.ds) | [Ktor](https://ktor.io/)                                       |\n| [Splash Screen ](https://developer.android.com/develop/ui/views/launch/splash-screen)                                                                                                | [Exposed](https://ktor.io/docs/server-integrate-database.html) |\n| [Credentials](https://developer.android.com/identity/sign-in/credential-manager)                                                                                                     | [MySQL](https://www.mysql.com/)                                |\n| [WorkManager](https://developer.android.com/topic/libraries/architecture/workmanager)                                                                                                | [Session](https://ktor.io/docs/server-session-auth.html)       |\n| [Dagger Hilt](https://developer.android.com/training/dependency-injection/hilt-android)                                                                                              | [JWT](https://jwt.io/)                                         |\n| [WindowSizeClass](https://developer.android.com/reference/kotlin/androidx/compose/material3/windowsizeclass/WindowSizeClass)                                                         | [Jedis](https://github.com/redis/jedis)                        |\n| [Media3](https://developer.android.com/media/media3)                                                                                                                                 |                                                                |\n| [Navigation](https://developer.android.com/develop/ui/compose/navigation)                                                                                                            |                                                                |\n| [OkHttp](https://square.github.io/okhttp/)                                                                                                                                           |                                                                |\n| [Paging](https://developer.android.com/topic/libraries/architecture/paging/v3-overview)                                                                                              |                                                                |\n| [Room](https://developer.android.com/training/data-storage/room)                                                                                                                     |                                                                |\n| [Coil](https://coil-kt.github.io/coil/compose/)                                                                                                                                      |                                                                |\n| Palette                                                                                                                                                                              |                                                                |\n\n## \u003ch2  align='center'\u003eInstallation\u003c/h2\u003e\n\n### Clone Repo\n\n```sh\ngit  clone  https://github.com/POULASTAAdAS/Movie-Browsing-App.git\n```\n\n### Docker\n\nRemove .example from file [.env.example](https://github.com/POULASTAAdAS/Kyoku/blob/dev/docker/.env.example)\n\nAdd passwrords on file .env\n\n```kotlin\nMYSQL_USER_PASSWORD=your_password\nMYSQL_PASSWORD=your_password\nREDIS_PASSWORD=your_password\n```\n\n**Run** [docker-compose.yml](https://github.com/POULASTAAdAS/Kyoku/blob/dev/docker/docker-compose.yml)\n\n```sh\ndocker-compose  start  -d\n```\n\n### Client\n\n**Setup environment variables on local.properties file of the android app**\n\n```kotlin\nBASE_URL=\"your base url\"\nCLIENT_ID=abcd\n```\n\n**Add SHA1 certificate of the client app(Kyoku). Run this on gradle task**\n\n```sh\nsigninReport\n```\n\n1. Create A Google Cloud Project on [GCP](https://console.cloud.google.com/projectcreate)\n\n2. Create OAuth Creadeintials for android and web [here](https://console.cloud.google.com/apis/credentials)\n\n3. Add the Client Id on local.properties file\n\n### Server\n\n**1. shard-manager**\n\nRemove .example from file [res.json.example](https://github.com/POULASTAAdAS/Kyoku/blob/dev/shard-manager/src/main/resources/res.json.example). Add urls\n\n```json\n{\n  \"storage\": {\n    \"driverClassName\": \"com.mysql.cj.jdbc.Driver\",\n    \"userJdbcURL\": \"your jdbc url\",\n    \"kyokuJdbcURL\": \"your jdbc url\",\n    \"genreArtistShard\": \"your jdbc url\",\n    \"shardPopularSongUrl\": \"your jdbc url\"\n  }\n}\n```\n\nRun [shard-manager](https://github.com/POULASTAAdAS/Kyoku/tree/dev/shard-manager) backed server.\n\n- This will create needed sharded database tables and populate with data\n\n- shard-manager also updates needed data i.e. song , artist etc popularity add new data at 12 am every day. [Code file](https://github.com/POULASTAAdAS/Kyoku/blob/dev/shard-manager/src/main/kotlin/com/poulastaa/kyoku/shardmanager/app/plugins/ScheduleJobs.kt)\n\n\u003cbr\u003e\n\u003cbr\u003e\n\n**2. kyoku-server**\n\nRemove .example from file [application.conf.example](https://github.com/POULASTAAdAS/Kyoku/blob/dev/kyoku-server/app/src/main/resources/application.conf.example)\n\n- Add all the fields\n\nThe databse urls should be same on both [application.conf.example](https://github.com/POULASTAAdAS/Kyoku/blob/dev/kyoku-server/app/src/main/resources/application.conf.example) and [res.json.example](https://github.com/POULASTAAdAS/Kyoku/blob/dev/shard-manager/src/main/resources/res.json.example)\n\n```sh\nstorage  {\n\tdriverClassName  =  \"com.mysql.cj.jdbc.Driver\"\n\tuserJdbcURL  =  \"your jdbc url\"\n\tkyokuJdbcURL  =  your  jdbc  url\"\n\tgenreArtistShard = \"your  jdbc  url\"\n\tpopularShard = \"your  jdbc  url\"\n}\n```\n\nAdd Properties as environment variables\n\n```kotlin\nBASE_URL= \"your base url\"\nCLIENT_ID=\"abc\"\nDEV_EMAIL=\nISSUER=https://accounts.google.com\nSENDER_EMAIL=\nSENDER_PASSWORD=\n```\n\n## \u003ch2  align='center'\u003eLicense\u003c/h2\u003e\n\nDesigned and developed by Poulastaa Das.\n\n```xml\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpoulastaadas%2Fkyoku","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpoulastaadas%2Fkyoku","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpoulastaadas%2Fkyoku/lists"}