{"id":30344498,"url":"https://github.com/gbennnn/gabut","last_synced_at":"2025-08-18T12:42:39.868Z","repository":{"id":308096840,"uuid":"1031591580","full_name":"gbennnn/gabut","owner":"gbennnn","description":"anonymous message","archived":false,"fork":false,"pushed_at":"2025-08-16T23:53:54.000Z","size":85,"stargazers_count":5,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-08-17T01:13:28.565Z","etag":null,"topics":["anonymous-message","firebase","messages","real-time"],"latest_commit_sha":null,"homepage":"https://gabut-five-phi.vercel.app","language":"Vue","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/gbennnn.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}},"created_at":"2025-08-04T03:29:49.000Z","updated_at":"2025-08-16T23:53:56.000Z","dependencies_parsed_at":"2025-08-04T07:28:29.740Z","dependency_job_id":"b06fc31f-3ee6-4ab0-b6f2-609de5e3e7fb","html_url":"https://github.com/gbennnn/gabut","commit_stats":null,"previous_names":["gbennnn/gabut"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/gbennnn/gabut","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gbennnn%2Fgabut","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gbennnn%2Fgabut/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gbennnn%2Fgabut/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gbennnn%2Fgabut/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gbennnn","download_url":"https://codeload.github.com/gbennnn/gabut/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gbennnn%2Fgabut/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":270996251,"owners_count":24681933,"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","status":"online","status_checked_at":"2025-08-18T02:00:08.743Z","response_time":89,"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":["anonymous-message","firebase","messages","real-time"],"created_at":"2025-08-18T12:42:37.442Z","updated_at":"2025-08-18T12:42:39.838Z","avatar_url":"https://github.com/gbennnn.png","language":"Vue","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Gabut - Anonymous Message Platform\nAplikasi web modern yang memungkinkan pengguna untuk berbagi pesan secara anonim dan memberikan vote (upvote/downvote) secara realtime. Aplikasi ini dilengkapi dengan sistem ranking, sorting, dan penyimpanan data cloud menggunakan **Firebase Firestore** untuk sinkronisasi multi-device.\n\n## Fitur Utama\n\n### Core Features\n\n- **Cloud Synchronization** - Data tersinkron real-time di semua perangkat menggunakan Firebase Firestore\n- **Real-time Voting System** - Upvote dan downvote pesan secara instant dengan update otomatis\n- **Anonymous Messaging** - Input dan submit pesan tanpa registrasi\n- **Cross-Device Access** - Akses data dari perangkat manapun, data tidak akan hilang\n- **Responsive Design** - Tampilan optimal di desktop, tablet, dan mobile\n\n### Advanced Features\n\n- **Multi-mode Sorting**:\n  - 🏆 Skor Tertinggi ke Terendah\n  - 📉 Skor Terendah ke Tertinggi\n  - 🕐 Pesan Terbaru\n  - 📅 Pesan Terlama\n\n- **Dynamic Ranking System**:\n  - 🥇 Badge Top #1 (Gold) dengan highlight khusus\n  - 🥈 Badge Top #2 (Silver) dengan border abu-abu\n  - 🥉 Badge Top #3 (Bronze) dengan border orange\n  - Real-time rank updates\n\n## Tech Stack\n\n- **Frontend Framework**: Vue.js 3 (Composition API)\n- **Build Tool**: Vite 7\n- **Styling**: Tailwind CSS (via CDN)\n- **State Management**: Vue Reactive \u0026 Computed Properties\n- **Backend/Database**: Firebase Firestore (NoSQL Cloud Database)\n- **Real-time Updates**: Firebase onSnapshot (WebSocket-based)\n- **Language**: JavaScript ES6+ with modern async/await\n\n## Installation \u0026 Setup\n\n### Prerequisites\n\n- **Node.js** (v20.19.0 atau lebih tinggi)\n- **npm** atau yarn\n- **Firebase Account** (gratis)\n\n### Quick Setup\n\n1. **Clone repository**\n\n   ```bash\n   git clone https://github.com/gbennnn/gabut.git\n   cd gabut\n   ```\n\n2. **Install dependencies**\n\n   ```bash\n   npm install\n   ```\n\n3. **Setup Firebase**\n\n   ```bash\n   # Copy template Firebase config\n   cp src/firebase.template.js src/firebase.js\n   ```\n\n4. **Configure Firebase**\n   - Buat project baru di [Firebase Console](https://console.firebase.google.com/)\n   - Enable Firestore Database\n   - Copy config dari Project Settings\n   - Paste ke `src/firebase.js`\n   - Lihat panduan lengkap di `FIREBASE_SETUP.md`\n\n5. **Run development server**\n\n   ```bash\n   npm run dev\n   ```\n\n6. **Open browser**\n   ```\n   http://localhost:5173\n   ```\n\n## Data Structure\n\n### Message Object (Firestore Document)\n\n```javascript\n{\n  id: String,              // Auto-generated Firestore document ID\n  text: String,            // Message content (max 1000 chars)\n  upvotes: Number,         // Total upvotes (default: 0)\n  downvotes: Number,       // Total downvotes (default: 0)\n  timestamp: Timestamp,    // Firebase server timestamp\n  createdAt: String        // ISO string for backup sorting\n}\n```\n\n### Firestore Collection Structure\n\n```\n📁 messages (collection)\n  📄 documentId1\n    ├── text: \"Hello world!\"\n    ├── upvotes: 5\n    ├── downvotes: 1\n    ├── timestamp: Firebase Timestamp\n    └── createdAt: \"2025-08-04T12:00:00.000Z\"\n  📄 documentId2\n    ├── text: \"Another message\"\n    ├── upvotes: 2\n    ├── downvotes: 0\n    └── ...\n```\n\n## Security \u0026 Privacy\n\n### Firestore Security Rules\n\n```javascript\nrules_version = '2';\nservice cloud.firestore {\n  match /databases/{database}/documents {\n    match /messages/{messageId} {\n      // Anyone can read messages\n      allow read: if true;\n\n      // Anyone can create messages with proper structure\n      allow create: if request.resource.data.keys().hasAll(['text', 'upvotes', 'downvotes', 'timestamp']) \u0026\u0026\n        request.resource.data.text is string \u0026\u0026\n        request.resource.data.text.size() \u003c= 1000;\n\n      // Anyone can update upvotes/downvotes only\n      allow update: if request.resource.data.diff(resource.data).affectedKeys().hasOnly(['upvotes', 'downvotes']);\n\n      // No deletes allowed\n      allow delete: if false;\n    }\n  }\n}\n```\n\n### Privacy Features\n\n- **Fully Anonymous** - No user registration or tracking\n- **Server-side Validation** - Firebase rules prevent malicious data\n- **No Personal Data** - Only message content and votes stored\n- **HTTPS Only** - All Firebase communication encrypted\n\n## License\n\nDistributed under the **MIT License**. See `LICENSE` for more information.\n\n\u003cdiv align=\"center\"\u003e\n  \u003cp\u003e⭐ Star this repo if you find it helpful!\u003c/p\u003e\n  \u003cp\u003eMade with ❤️ using Vue.js and Firebase\u003c/p\u003e\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgbennnn%2Fgabut","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgbennnn%2Fgabut","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgbennnn%2Fgabut/lists"}