{"id":49879678,"url":"https://github.com/spongycode/song-quest","last_synced_at":"2026-05-15T13:39:56.038Z","repository":{"id":217261019,"uuid":"739898675","full_name":"spongycode/song-quest","owner":"spongycode","description":"A fully functional Android quiz game featuring audio challenges, leaderboards, and multiple categories.","archived":false,"fork":false,"pushed_at":"2025-11-13T15:33:02.000Z","size":32601,"stargazers_count":10,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-11-13T17:24:18.806Z","etag":null,"topics":["android","clean-architecture","firebase","game-development","hilt","jetpack-compose","kotlin","ktor-client","mongodb","music","mvvm"],"latest_commit_sha":null,"homepage":"https://songquest.vercel.app","language":"Kotlin","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/spongycode.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":"2024-01-06T21:59:07.000Z","updated_at":"2025-11-13T15:33:05.000Z","dependencies_parsed_at":"2024-01-15T10:01:07.580Z","dependency_job_id":"860cdd5e-5bc2-485c-aaad-3612beadfc61","html_url":"https://github.com/spongycode/song-quest","commit_stats":null,"previous_names":["spongycode/song-quest"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/spongycode/song-quest","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spongycode%2Fsong-quest","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spongycode%2Fsong-quest/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spongycode%2Fsong-quest/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spongycode%2Fsong-quest/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/spongycode","download_url":"https://codeload.github.com/spongycode/song-quest/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spongycode%2Fsong-quest/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33068889,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-15T11:35:32.926Z","status":"ssl_error","status_checked_at":"2026-05-15T11:35:31.362Z","response_time":103,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5: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":["android","clean-architecture","firebase","game-development","hilt","jetpack-compose","kotlin","ktor-client","mongodb","music","mvvm"],"created_at":"2026-05-15T13:39:55.671Z","updated_at":"2026-05-15T13:39:56.028Z","avatar_url":"https://github.com/spongycode.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🚧 Under Development\n\nThis repository is currently in active development to support **multiplatform** targets:\n- Android  \n- iOS  \n- Web  \n\nFor more details and latest progress, check out the [`multiplatform`](https://github.com/spongycode/song-quest/tree/multiplatform) branch.\n\n\u003cbr/\u003e\n\n\u003cdiv align=\"center\"\u003e\n    \u003cimg src=\"assets/app_logo.jpg\" width=\"128\" height=\"128\" style=\"display: block; margin: 0 auto\"/\u003e\n    \u003ch1\u003eSong Quest 🎶\u003c/h1\u003e\n    \u003cp\u003eA fully functional Android quiz game featuring audio challenges, leaderboards, and multiple categories.\u003c/p\u003e\n\u003c/div\u003e\n\n## Installation\n\n[\u003cimg src=\"https://github.com/user-attachments/assets/5f6c07aa-fe20-4508-90a7-79547dd241dd\"\nalt=\"Get it on Indus App Store\"\nheight=\"70\"\u003e](https://indusapp.store/pad93i9h)\n[\u003cimg src=\"https://github.com/user-attachments/assets/b8d69317-bdd6-4014-96b4-6a6f6f126f4a\"\nalt=\"Get it on GitHub\"\nheight=\"70\"\u003e](https://github.com/spongycode/song-quest/releases/latest)\n\n\n## Features 🌟\n### Authentication\n- \u003cb\u003eLogin:\u003c/b\u003e Users can securely log in to their accounts.\n- \u003cb\u003eRegistration:\u003c/b\u003e New users can easily create accounts to start playing.\n- \u003cb\u003ePassword Reset:\u003c/b\u003e Reset your password through the app, and a one-time password will be sent to your email.\n### Gameplay\n- \u003cb\u003eGuess the Answer:\u003c/b\u003e Test your knowledge by guessing the correct answer listening the audio.-\n- \u003cb\u003eMultiple Categories:\u003c/b\u003e Choose from various exciting categories, each with tailored questions for an engaging gameplay experience.\n- \u003cb\u003eLimited Attempts:\u003c/b\u003e You have limited wrong attempts in each game play.\n- \u003cb\u003eLeaderboard:\u003c/b\u003e Compete with others and view the consistent leaderboard based on the highest scores.\n- \u003cb\u003eGame History:\u003c/b\u003e Track your progress by reviewing the history of games you've played.\n### Profile\n- \u003cb\u003eUpdate Profile:\u003c/b\u003e Customize your profile details in the basic settings.\n\n\n\n## Screenshots 📷\n\u003cp align=\"center\"\u003e  \n\u003cimg src=\"assets/mp_1.png\" alt=\"drawing\" width=\"600\" /\u003e\n\u003cimg src=\"assets/mp_2.png\" alt=\"drawing\" width=\"600\" /\u003e\n\u003cimg src=\"assets/mp_3.png\" alt=\"drawing\" width=\"600\" /\u003e\n\u003c/p\u003e\n\n## Video Preview 📹\n\n[![Video Preview]()](https://github.com/spongycode/song-quest/assets/65273165/08f1f156-683c-49bd-9451-53132774e2b9)\n\n\n## App Flow \u0026 Architecture 👷‍♂️\n\u003cp align=\"center\"\u003e  \n\u003cimg src=\"https://github.com/spongycode/song-quest/assets/65273165/85985538-56b2-4ad2-aab4-a613bb4bafe2\" alt=\"drawing\" width=\"800\"/\u003e\n\u003c/p\u003e\n\n## Tech Stack 🛠️\n- \u003cb\u003e[Kotlin](https://kotlinlang.org/):\u003c/b\u003e Primary language for Android app development.\n- \u003cb\u003e[NextJS API Backend](https://nextjs.org/docs/pages/building-your-application/routing/api-routes):\u003c/b\u003e Utilizes NextJS for a powerful and flexible backend. See \u003cb\u003e[here](https://github.com/spongycode/song-quest-backend)\u003c/b\u003e for implementation details.\n- \u003cb\u003e[Firebase](https://firebase.google.com/):\u003c/b\u003e Used for storing audio files, providing a scalable and reliable cloud storage solution.\n- \u003cb\u003e[MongoDB](https://www.mongodb.com/):\u003c/b\u003e Employed for a NoSQL database, handling normal query data storage efficiently.\n- \u003cb\u003e[Clean Architecture Pattern](https://developer.android.com/topic/architecture):\u003c/b\u003e Organizes code into distinct layers (UI, Domain, Data) for modularity and maintainability in Android app development.\n- \u003cb\u003e[MVVM](https://developer.android.com/topic/libraries/architecture/viewmodel):\u003c/b\u003e Architecture pattern (Model-View-ViewModel) for a structured and maintainable app design.\n- \u003cb\u003e[Hilt](https://developer.android.com/training/dependency-injection/hilt-android):\u003c/b\u003e Simplifies dependency injection in Android apps.\n- \u003cb\u003e[Ktor client](https://ktor.io/docs/getting-started-ktor-client.html):\u003c/b\u003e Facilitates asynchronous client-server communication.\n- \u003cb\u003e[Jetpack Compose](https://developer.android.com/jetpack/compose):\u003c/b\u003e Declarative UI toolkit for native Android apps.\n- \u003cb\u003e[Compose Navigation](https://developer.android.com/jetpack/compose/navigation):\u003c/b\u003e Navigation component for Jetpack Compose.\n- \u003cb\u003e[Material 3](https://m3.material.io/):\u003c/b\u003e Latest Material Design system for unified app aesthetics.\n- \u003cb\u003e[Datastore](https://developer.android.com/topic/libraries/architecture/datastore):\u003c/b\u003e Modern local data storage solution.\n\n## Backend details\n\n### Routes `api/mobile`\n- \u003cb\u003e`/gameplay`\u003c/b\u003e\n    - `/create`: Create a new game.\n    - `/question`: Upload new questions and fetch questions category-wise.\n    - `/check`: Check the correct answer for the question.\n    - `/highscore`: Fetch the leaderboard category-wise.\n    - `/history`: Fetch the user's game history.\n    - `/save`: Save the game.\n- \u003cb\u003e`/users`\u003c/b\u003e\n    - `/register`: Register new users.\n    - `/login`: Login users.\n    - `/profile`: Get and update profile details.\n    - `/resetPassword`: Reset password and send OTP via email.\n\n\n### Data Models\n\n- \u003cb\u003e Game Model\u003c/b\u003e\n\n```json\n{\n  \"game\": {\n    \"player\": \"String (required)\",\n    \"score\": \"Number (default: 0.0)\",\n    \"accurate\": \"Number (default: 0)\",\n    \"questionsId\": \"Array of ObjectId (ref: 'Question')\",\n    \"category\": \"String (required)\",\n    \"isGameSaved\": \"Boolean (default: false)\",\n    \"createdAt\": \"Date (default: Current timestamp)\",\n    \"expireAt\": \"Date (default: Current timestamp)\"\n  }\n}\n```\n**Note:** This project utilizes a \u003cb\u003e[TTL (Time-to-Live) index](https://www.mongodb.com/docs/manual/core/index-ttl/)\u003c/b\u003e to \u003cb\u003eautomatically delete unsaved games\u003c/b\u003e after `300 seconds`. The index is based on the `expireAt` field and is configured to delete games where `isGameSaved` is false. This ensures efficient cleanup of temporary data.\n- \u003cb\u003eQuestion Model\u003c/b\u003e\n\n```json\n{\n  \"question\": {\n    \"title\": \"String (required)\",\n    \"songUrl\": \"String\",\n    \"options\": [\n      {\n        \"optionid\": \"Number (required)\",\n        \"value\": \"String (required)\"\n      }\n    ],\n    \"correctOptionId\": \"Number (required)\",\n    \"category\": \"String (required)\",\n    \"totalAttempts\": \"Number (default: 0)\",\n    \"difficulty\": \"Number (default: 0.5)\",\n    \"altText\": \"String (default: '')\",\n    \"createdAt\": \"Date (default: Current timestamp)\"\n  }\n}\n```\n- \u003cb\u003eUser Model\u003c/b\u003e\n```json\n{\n  \"user\": {\n    \"username\": \"String (required, unique, trim)\",\n    \"email\": \"String (required, unique, trim)\",\n    \"imageUrl\": \"String\",\n    \"password\": \"String (required, 'Password is required')\",\n    \"gamesPlayed\": \"Number (default: 0)\",\n    \"forgotPasswordToken\": \"String\",\n    \"forgotPasswordTokenExpiry\": \"Date\",\n    \"refreshToken\": \"String\",\n    \"createdAt\": \"Date (default: Current timestamp)\"\n  }\n}\n```\n\n### Scoring\nThe score for each question is determined using the formula below.\n\n\u003cdiv align=\"center\"\u003e  \n\n```math\nscore = max(0, -0.00057 \\times timeTaken^3 + 0.037 \\times timeTaken^2 - 0.96 \\times timeTaken + 10)\n```\n\n\u003cimg src=\"https://github.com/spongycode/song-quest/assets/65273165/182fd4cb-f3ea-4a4f-a3f8-f14f93097664\" alt=\"drawing\" width=\"400\"/\u003e\n\u003c/div\u003e\n\n\n## Getting Started 🚀\nTo begin using Song Quest, clone the repository and open the project in Android Studio. Clone the backend server from [here](https://github.com/spongycode/song-quest-backend) and fill up the required environment variables mentioned in the `sample.env` file to set up your own server.\n\n\n## Contributing 🤝\nFeel free to contribute to this project by submitting issues, pull requests, or providing valuable feedback. Your contributions are always welcome! 🙌\n\n## License 📄\nSong Quest is released under the [MIT License](https://opensource.org/licenses/MIT). Feel free to modify or add to this list based on the specific features of your app.\n\n## Happy coding! 🎉👩‍💻👨‍💻\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspongycode%2Fsong-quest","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fspongycode%2Fsong-quest","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspongycode%2Fsong-quest/lists"}