{"id":39754859,"url":"https://github.com/fabyo0/vote-app","last_synced_at":"2026-01-18T11:29:41.431Z","repository":{"id":200563954,"uuid":"702681933","full_name":"fabyo0/vote-app","owner":"fabyo0","description":"A clean, efficient voting app with Laravel and Livewire. Features user auth, idea submission, voting, and nested comments. — LC Series","archived":false,"fork":false,"pushed_at":"2025-12-12T17:15:23.000Z","size":2419,"stargazers_count":3,"open_issues_count":6,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-12-14T08:11:51.268Z","etag":null,"topics":["comment-system","follow-system","forum","forum-application","idea-management-platform","laravel","laravel-forum","laravel-vote","vote-application","vote-system"],"latest_commit_sha":null,"homepage":"","language":"PHP","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/fabyo0.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":"2023-10-09T19:39:42.000Z","updated_at":"2025-12-12T17:15:22.000Z","dependencies_parsed_at":null,"dependency_job_id":"bfced9b7-0fd1-4816-acca-26bd43d56de6","html_url":"https://github.com/fabyo0/vote-app","commit_stats":null,"previous_names":["fabyo0/vote-app"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/fabyo0/vote-app","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fabyo0%2Fvote-app","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fabyo0%2Fvote-app/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fabyo0%2Fvote-app/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fabyo0%2Fvote-app/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fabyo0","download_url":"https://codeload.github.com/fabyo0/vote-app/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fabyo0%2Fvote-app/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28535169,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-18T10:13:46.436Z","status":"ssl_error","status_checked_at":"2026-01-18T10:13:11.045Z","response_time":98,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6: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":["comment-system","follow-system","forum","forum-application","idea-management-platform","laravel","laravel-forum","laravel-vote","vote-application","vote-system"],"created_at":"2026-01-18T11:29:41.338Z","updated_at":"2026-01-18T11:29:41.411Z","avatar_url":"https://github.com/fabyo0.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🚀 Vote App - Idea Voting Platform\n\n[![CI Tests](https://github.com/fabyo0/vote-app/actions/workflows/ci.yml/badge.svg)](https://github.com/fabyo0/vote-app/actions/workflows/ci.yml)\n[![Run tests](https://github.com/fabyo0/vote-app/actions/workflows/laravel.yml/badge.svg)](https://github.com/fabyo0/vote-app/actions/workflows/laravel.yml)\n[![codecov](https://codecov.io/github/fabyo0/vote-app/graph/badge.svg?token=YXZ7XMNABM)](https://codecov.io/github/fabyo0/vote-app)\n[![Laravel](https://img.shields.io/badge/Laravel-10.x-FF2D20?style=flat\u0026logo=laravel)](https://laravel.com)\n[![Livewire](https://img.shields.io/badge/Livewire-3.x-4E56A6?style=flat)](https://livewire.laravel.com)\n[![License](https://img.shields.io/badge/License-MIT-green.svg)](LICENSE)\n\nA modern, full-featured voting platform built with Laravel 10 and Livewire. Submit ideas, vote, engage in threaded discussions, and receive real-time notifications - all in a beautiful, responsive interface.\n\n---\n\n## 📸 Screenshots\n\n\u003cdetails\u003e\n\u003csummary\u003eClick to view screenshots\u003c/summary\u003e\n\n### Home Page\n\u003cimg width=\"1411\" height=\"633\" alt=\"Screenshot 2025-11-19 at 20 09 11\" src=\"https://github.com/user-attachments/assets/293fae26-3965-45c3-b3b9-54e1bb11e477\" /\u003e\n\n### Idea Details \u0026 Comments\n\u003cimg width=\"1236\" height=\"628\" alt=\"Screenshot 2025-11-19 at 20 09 46\" src=\"https://github.com/user-attachments/assets/0427262a-0415-443e-99ed-339dfdf9b492\" /\u003e\n\n### User Profile\n\u003cimg width=\"1159\" height=\"650\" alt=\"Screenshot 2025-11-19 at 20 10 18\" src=\"https://github.com/user-attachments/assets/e806c018-5a76-4ac3-b612-83a3d2de9c40\" /\u003e\n\n### Idea Comments\n\u003cimg width=\"742\" height=\"429\" alt=\"Screenshot 2025-11-19 at 20 11 26\" src=\"https://github.com/user-attachments/assets/7a1c301d-13ba-4087-b95e-b44d90e0c79a\" /\u003e\n\n### Notification Settings\n\u003cimg width=\"1102\" height=\"588\" alt=\"Screenshot 2025-11-19 at 20 12 08\" src=\"https://github.com/user-attachments/assets/1deba621-bf0e-48a3-b393-55c9df199bb4\" /\u003e\n\n\u003c/details\u003e\n\n---\n\n## ✨ Key Features\n\n### 🗳️ Core Functionality\n- **Idea Management** - Submit, edit, and categorize ideas with status tracking\n- **Smart Voting System** - Upvote/downvote with duplicate prevention\n- **Unlimited Nested Comments** - Full threaded discussions with infinite nesting\n- **Status Workflow** - Track ideas through: Open → Considering → In Progress → Implemented → Closed\n\n### 👥 Social Features\n- **User Profiles** - Customizable profiles with activity tracking\n- **Follow System** - Follow users and see their contributions\n- **Avatar System** - Auto-generated avatars (Laravolt) with upload support (Spatie Media Library)\n- **Username URLs** - Clean, SEO-friendly URLs like `/users/@username`\n\n### 🔔 Advanced Notifications\n- **Dual Delivery System**:\n  - 📡 **Real-time** - Instant updates via Pusher WebSockets\n  - 💾 **Database Polling** - Fallback for environments without WebSockets\n  - 🔄 **Hybrid Mode** - Best of both worlds (recommended)\n- **Notification Types**: New votes, comments, status changes, mentions\n- **Admin Control Panel** - Switch delivery methods on-the-fly\n\n### 🔐 Authentication \u0026 Security\n- **Social Login** - OAuth integration with Facebook \u0026 Google\n- **CSRF Protection** - Built-in Laravel security\n- **XSS Prevention** - Automatic output escaping\n- **Role-Based Access** - Admin/User permissions\n\n### 🎨 User Experience\n- **Dark Mode** - Toggle between light/dark themes\n- **Responsive Design** - Mobile-first approach\n- **Real-time Updates** - Live UI updates without page refresh\n- **Spam Prevention** - Rate limiting and duplicate detection\n\n### 📊 Additional Features\n- **Polls** - Attach polls to ideas for community input\n- **Search \u0026 Filters** - Find ideas by status, category, or popularity\n- **Activity Feed** - Track all platform activity\n- **Email Notifications** - Digest emails for important updates\n\n---\n\n## 🎯 Demo\n\u003e **Live Demo:** [https://vote-app.on-forge.com/](https://vote-app.on-forge.com/)\n\n**Test Credentials:**\n```\nEmail: demo@demo.com\nPassword: Pa$$w0rd!\n```\n\n---\n\n## 📋 Requirements\n\nEnsure the following are installed:\n\n| Requirement | Version | Required |\n|------------|---------|----------|\n| PHP | \u003e= 8.0 | ✅ |\n| Composer | 2.x | ✅ |\n| MySQL / PostgreSQL | 5.7+ / 12+ | ✅ |\n| Node.js | \u003e= 16.x | ✅ |\n| npm | \u003e= 8.x | ✅ |\n| Redis | Latest | ⭕ Optional |\n| Pusher Account | - | ⭕ Optional |\n\n---\n\n## 🚀 Quick Start\n\n### 1️⃣ Clone \u0026 Install\n```bash\n# Clone repository\ngit clone https://github.com/fabyo0/vote-app.git\ncd vote-app\n\n# Install dependencies\ncomposer install\nnpm install\n\n# Setup environment\ncp .env.example .env\nphp artisan key:generate\n```\n\n### 2️⃣ Database Setup\n\nUpdate `.env` with your database credentials:\n```env\nDB_CONNECTION=mysql\nDB_HOST=127.0.0.1\nDB_PORT=3306\nDB_DATABASE=vote_app\nDB_USERNAME=root\nDB_PASSWORD=your_password\n```\n\nRun migrations and seed data:\n```bash\nphp artisan migrate --seed\nphp artisan storage:link\n```\n\n### 3️⃣ Queue Configuration\n\nSet up queue for background jobs:\n```env\nQUEUE_CONNECTION=database\n```\n\nCreate jobs table:\n```bash\nphp artisan queue:table\nphp artisan migrate\n```\n\n### 4️⃣ Build \u0026 Run\n```bash\n# Build frontend assets\nnpm run build\n\n# Start development server\nphp artisan serve\n\n# In separate terminal - Start queue worker\nphp artisan queue:work\n```\n\nVisit: **http://localhost:8000** 🎉\n\n---\n\n## ⚙️ Configuration\n\n### Notification System\n\nChoose your notification delivery method:\n\n#### Option 1: Database Only (Default)\nNo additional setup required. Polls database every 30 seconds.\n\n#### Option 2: Real-time with Pusher\n\n1. Create account at [pusher.com](https://pusher.com)\n2. Update `.env`:\n```env\nBROADCAST_DRIVER=pusher\n\nPUSHER_APP_ID=your-app-id\nPUSHER_APP_KEY=your-app-key\nPUSHER_APP_SECRET=your-app-secret\nPUSHER_APP_CLUSTER=your-cluster\n\nVITE_PUSHER_APP_KEY=\"${PUSHER_APP_KEY}\"\nVITE_PUSHER_APP_CLUSTER=\"${PUSHER_APP_CLUSTER}\"\n```\n\n3. Clear cache and rebuild:\n```bash\nphp artisan config:clear\nnpm run build\n```\n\n#### Admin Control\n\nNavigate to `/admin/settings` to switch between:\n- 💾 Database Only\n- 📡 Pusher Only  \n- 🔄 Both (Recommended)\n\n### Social Authentication (Optional)\n\n1. **Create OAuth Apps**:\n   - [Facebook Developers](https://developers.facebook.com)\n   - [Google Cloud Console](https://console.cloud.google.com)\n\n2. **Update `.env`**:\n```env\nFACEBOOK_CLIENT_ID=your-id\nFACEBOOK_CLIENT_SECRET=your-secret\n\nGOOGLE_CLIENT_ID=your-id\nGOOGLE_CLIENT_SECRET=your-secret\n```\n\n3. **Set Callback URLs**:\n   - Facebook: `http://yourdomain.com/auth/facebook/callback`\n   - Google: `http://yourdomain.com/auth/google/callback`\n\n---\n\n## 🛠️ Development Commands\n```bash\n# Start all services\nphp artisan serve             # Laravel server (port 8000)\nnpm run dev                   # Vite HMR server\nphp artisan queue:work        # Queue worker\n\n# Database\nphp artisan migrate:fresh --seed   # Fresh start with data\nphp artisan db:seed                # Re-seed only\n\n# Livewire\nphp artisan make:livewire ComponentName\nphp artisan livewire:publish --assets\n\n# Cache management\nphp artisan optimize:clear         # Clear all caches\nphp artisan config:cache           # Cache config\nphp artisan route:cache            # Cache routes\nphp artisan view:cache             # Cache views\n```\n\n---\n\n## 🧪 Testing\n\nRun test suite:\n```bash\n# All tests\nphp artisan test\n\n# Specific suites\nphp artisan test --testsuite=Feature\nphp artisan test --testsuite=Unit\n\n# With coverage\nphp artisan test --coverage\nphp artisan test --coverage-html coverage\n```\n\nConfigure test database in `.env`:\n```env\nDB_DATABASE_TESTING=vote_app_test\n```\n\n---\n\n## 🏭 Production Deployment\n\n### Environment Setup\n\nUpdate `.env` for production:\n```env\nAPP_ENV=production\nAPP_DEBUG=false\nAPP_URL=https://yourdomain.com\n\n# Performance optimization\nCACHE_DRIVER=redis\nQUEUE_CONNECTION=redis\nSESSION_DRIVER=redis\n\n# Mail configuration\nMAIL_MAILER=smtp\nMAIL_HOST=smtp.mailtrap.io\nMAIL_PORT=587\nMAIL_USERNAME=your-username\nMAIL_PASSWORD=your-password\n```\n\n### Optimization\n```bash\n# Install production dependencies\ncomposer install --optimize-autoloader --no-dev\n\n# Optimize application\nphp artisan config:cache\nphp artisan route:cache\nphp artisan view:cache\nphp artisan event:cache\n\n# Build assets\nnpm run build\n```\n\n### Queue Worker (Supervisor)\n\nCreate `/etc/supervisor/conf.d/vote-app-worker.conf`:\n```ini\n[program:vote-app-worker]\nprocess_name=%(program_name)s_%(process_num)02d\ncommand=php /path/to/artisan queue:work --sleep=3 --tries=3 --max-time=3600\nautostart=true\nautorestart=true\nstopasgroup=true\nkillasgroup=true\nuser=www-data\nnumprocs=2\nredirect_stderr=true\nstdout_logfile=/path/to/storage/logs/worker.log\nstopwaitsecs=3600\n```\n\nStart supervisor:\n```bash\nsudo supervisorctl reread\nsudo supervisorctl update\nsudo supervisorctl start vote-app-worker:*\n```\n\n---\n\n## 🚨 Troubleshooting\n\n### Clear All Caches\n```bash\nphp artisan optimize:clear\n```\n\n### Permission Issues (Linux/macOS)\n```bash\nsudo chown -R $USER:www-data storage bootstrap/cache\nchmod -R 775 storage bootstrap/cache\n```\n\n### Queue Not Processing\n```bash\n# Check failed jobs\nphp artisan queue:failed\n\n# Retry all\nphp artisan queue:retry all\n\n# Monitor queue\nphp artisan queue:work --verbose\n```\n\n### Pusher Not Working\n1. Check browser console (F12) for errors\n2. Verify credentials in `.env`\n3. Check [Pusher Dashboard](https://dashboard.pusher.com) for activity\n4. Clear config: `php artisan config:clear`\n5. Rebuild assets: `npm run build`\n\n### Frontend Assets 404\n```bash\nnpm run build\nphp artisan storage:link\n```\n\n---\n\n## 📚 Tech Stack\n\n### Backend\n- **Laravel 10** - PHP Framework\n- **Livewire 3** - Full-stack framework\n- **MySQL/PostgreSQL** - Database\n- **Redis** - Caching \u0026 Queues\n\n### Frontend\n- **Alpine.js** - Lightweight JS framework\n- **Tailwind CSS** - Utility-first CSS\n- **Vite** - Build tool\n\n### Packages\n- **Spatie Media Library** - File uploads\n- **Laravolt Avatar** - Avatar generation\n- **Laravel Socialite** - OAuth\n- **Pusher** - WebSockets\n\n---\n\n## 📖 Project Structure\n```\napp/\n├── Http/\n│   ├── Controllers/        # HTTP Controllers\n│   └── Livewire/          # Livewire Components\n├── Models/                # Eloquent Models\n├── Notifications/         # Notification Classes\n└── Providers/             # Service Providers\n\nresources/\n├── views/\n│   ├── livewire/         # Livewire Views\n│   └── layouts/          # Layout Templates\n└── js/                   # Frontend Assets\n\ndatabase/\n├── migrations/           # Database Schema\n├── seeders/             # Data Seeders\n└── factories/           # Model Factories\n\ntests/\n├── Feature/             # Feature Tests\n└── Unit/                # Unit Tests\n```\n\n---\n\n## 🤝 Contributing\n\nContributions are welcome! Please follow these steps:\n\n1. **Fork** the repository\n2. **Create** a feature branch\n```bash\n   git checkout -b feature/amazing-feature\n```\n3. **Commit** your changes (use [Conventional Commits](https://conventionalcommits.org))\n```bash\n   git commit -m \"feat: add amazing feature\"\n```\n4. **Push** to your branch\n```bash\n   git push origin feature/amazing-feature\n```\n5. **Open** a Pull Request\n\n### Commit Convention\n- `feat:` New feature\n- `fix:` Bug fix\n- `docs:` Documentation\n- `style:` Formatting\n- `refactor:` Code restructuring\n- `test:` Adding tests\n- `chore:` Maintenance\n\n---\n\n## 🐛 Issues \u0026 Support\n\n- **Bug Reports**: [Open an issue](https://github.com/fabyo0/vote-app/issues/new?template=bug_report.md)\n- **Feature Requests**: [Request a feature](https://github.com/fabyo0/vote-app/issues/new?template=feature_request.md)\n- **Discussions**: [GitHub Discussions](https://github.com/fabyo0/vote-app/discussions)\n\n---\n\n## 📄 License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n---\n\n## 🙏 Acknowledgments\n\n- [Laravel](https://laravel.com) - The PHP Framework\n- [Livewire](https://livewire.laravel.com) - Full-stack Framework\n- [Tailwind CSS](https://tailwindcss.com) - CSS Framework\n- [Pusher](https://pusher.com) - Real-time Infrastructure\n- [Spatie](https://spatie.be) - Amazing Laravel Packages\n\n---\n\n## 📞 Connect\n\n- **GitHub**: [@fabyo0](https://github.com/fabyo0)\n- **Issues**: [Report here](https://github.com/fabyo0/vote-app/issues)\n- **Discussions**: [Join here](https://github.com/fabyo0/vote-app/discussions)\n\n---\n\n\u003cdiv align=\"center\"\u003e\n\n### ⭐ Star this repo if you find it helpful!\n\n**Built with ❤️ using Laravel \u0026 Livewire**\n\n[Report Bug](https://github.com/fabyo0/vote-app/issues) · [Request Feature](https://github.com/fabyo0/vote-app/issues) · [Documentation](https://github.com/fabyo0/vote-app/wiki)\n\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffabyo0%2Fvote-app","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffabyo0%2Fvote-app","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffabyo0%2Fvote-app/lists"}