{"id":30895567,"url":"https://github.com/styropyr0/qdrop-web","last_synced_at":"2026-02-08T22:02:44.290Z","repository":{"id":309098955,"uuid":"1034925839","full_name":"styropyr0/QDrop-Web","owner":"styropyr0","description":"QDrop is an open-source web application designed to help developers upload and manage their QA builds efficiently","archived":false,"fork":false,"pushed_at":"2025-11-18T15:10:56.000Z","size":1282,"stargazers_count":6,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-29T18:35:57.228Z","etag":null,"topics":[],"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/styropyr0.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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-08-09T09:21:05.000Z","updated_at":"2025-12-05T06:57:03.000Z","dependencies_parsed_at":"2025-09-08T22:07:42.067Z","dependency_job_id":"f5d2de64-f955-45b0-bc14-2223ce2df47d","html_url":"https://github.com/styropyr0/QDrop-Web","commit_stats":null,"previous_names":["styropyr0/qdrop-web"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/styropyr0/QDrop-Web","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/styropyr0%2FQDrop-Web","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/styropyr0%2FQDrop-Web/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/styropyr0%2FQDrop-Web/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/styropyr0%2FQDrop-Web/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/styropyr0","download_url":"https://codeload.github.com/styropyr0/QDrop-Web/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/styropyr0%2FQDrop-Web/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29246439,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-08T21:42:34.334Z","status":"ssl_error","status_checked_at":"2026-02-08T21:41:38.468Z","response_time":57,"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":[],"created_at":"2025-09-08T22:07:32.998Z","updated_at":"2026-02-08T22:02:44.277Z","avatar_url":"https://github.com/styropyr0.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# QDrop Web App\n\nQDrop is an open-source web application designed to help developers upload and manage their QA builds efficiently.\nIt provides a clean, intuitive interface to upload APK files along with metadata such as version, label, and changelog.\nUploaded APKs are securely hosted on **Cloudflare R2**, and their metadata is stored in **Firebase Realtime Database**.\n\n---\n\n## Mobile App\n\nA Jetpack Compose-based Android app that works alongside this web app for managing QA builds is also open source:\n[Mobile App](https://github.com/styropyr0/QDrop-App)\n\n---\n\n## Screenshots\n\n![Enter the organization](screenshots/enter_org.png)\n*Enter the unique organization ID to upload builds*\n\n![Upload build](screenshots/upload_build.png)\n*Provide version, label, changelog, and upload the build*\n\n![Upload progress](screenshots/uploading.png)\n*View real-time upload progress and status*\n\n![After successful upload](screenshots/upload_complete.png)\n*See confirmation, Build ID, and QR code for direct access*\n\n---\n\n## Features\n\n* Upload APK files (up to 100 MB) via drag \u0026 drop or file browser\n* Display of upload progress and live status\n* Generate Build ID and QR code for direct download\n* Add version, label, and detailed changelog for each build\n* Option to replace a previous build\n* Organize uploads using unique organization IDs\n* Store APKs on **Cloudflare R2**\n* Save metadata in **Firebase Realtime Database**\n* Sleek dark theme with gradient design and responsive layout\n* Input validation and improved error/success notifications\n* Open-source and easy to customize\n\n---\n\n## Project Structure\n\n```\npublic/\n  ├── css/\n  │    └── styles.css              # App styles\n  ├── js/\n  │    ├── app.js                  # Main app logic\n  │    ├── config.js               # Configuration (API keys, endpoints, etc.)\n  │    ├── organization-manager.js # Handles organization switching\n  │    └── upload-manager.js       # Handles upload and progress logic\n  ├── index.html                   # Main web interface\n.gitignore\nLICENSE\npackage.json                       # Project dependencies\nREADME.md\nserver.js                          # Optional local hosting server\n```\n\n---\n\n## Configuration\n\nBefore running QDrop, edit `public/js/config.js` with your **Cloudflare R2** and **Firebase** credentials.\nThese credentials are required for upload and metadata storage.\n\n```js\nconst CONFIG = {\n    FIREBASE_CONFIG: {\n        apiKey: \"YOUR_FIREBASE_API_KEY\",\n        authDomain: \"YOUR_PROJECT_ID.firebaseapp.com\",\n        databaseURL: \"https://YOUR_PROJECT_ID-default-rtdb.REGION.firebasedatabase.app\",\n        projectId: \"YOUR_PROJECT_ID\",\n        storageBucket: \"YOUR_PROJECT_ID.appspot.com\",\n        messagingSenderId: \"YOUR_SENDER_ID\",\n        appId: \"YOUR_APP_ID\",\n        measurementId: \"YOUR_MEASUREMENT_ID\"\n    },\n\n    STORAGE_BUCKET: 'YOUR_R2_BUCKET_NAME',\n\n    MAX_FILE_SIZE: 100 * 1024 * 1024, // 100MB max upload\n\n    ALLOWED_FILE_TYPES: ['.apk'],\n\n    GITHUB: {\n        USERNAME: 'YOUR_GITHUB_USERNAME',\n        REPOSITORY: 'YOUR_GITHUB_REPOSITORY'\n    }\n};\n```\n\n---\n\n## How to Run\n\n### Prerequisites\n\n* [Node.js](https://nodejs.org/) installed\n* Firebase project with Realtime Database enabled\n* Cloudflare R2 bucket created and configured for S3-compatible access\n\n### Steps\n\n1. **Fork** the repository on GitHub\n2. **Clone** it locally:\n\n   ```bash\n   git clone https://github.com/YOUR_GITHUB_USERNAME/QDrop-Web.git\n   cd qdrop-web\n   ```\n3. **Install dependencies:**\n\n   ```bash\n   npm install\n   ```\n4. **Update credentials** in `public/js/config.js`\n5. **Start the server (optional for local testing):**\n\n   ```bash\n   node server.js\n   ```\n6. **Open your browser:**\n   [http://localhost:3000](http://localhost:3000)\n\n---\n\n## Security Recommendations\n\n* Never expose Cloudflare R2 or Firebase keys publicly\n* Use environment variables or secret-management tools for production\n* Configure secure Firebase Realtime Database rules\n* Set R2 bucket permissions to allow only required operations (e.g., `PutObject`, `GetObject`)\n* Avoid committing any sensitive credentials to GitHub\n\n---\n\n## Contributing\n\nContributions are welcome!\nFork the repository, make improvements, and submit a pull request.\nPlease keep all private keys and secrets out of your commits.\n\n---\n\n## License\n\nMIT License — see the [LICENSE](LICENSE) file for details.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstyropyr0%2Fqdrop-web","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstyropyr0%2Fqdrop-web","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstyropyr0%2Fqdrop-web/lists"}