Aplikasi platform diskusi berbasis web yang dibangun dengan Laravel 11 dan Livewire 3. Platform ini memungkinkan pengguna untuk membuat, berbagi, dan mendiskusikan topik-topik dengan fitur lengkap seperti komentar, reaksi, laporan konten, dan sistem verifikasi.
- β Autentikasi pengguna dengan email & Google OAuth
- β Sistem verifikasi email
- β Reset password melalui email
- β Membuat, mengedit, dan menghapus post/diskusi
- β Sistem komentar berjenjang
- β Reaksi terhadap post dan komentar
- β Pencarian dan filter konten
- β Tag/kategori untuk post
- β Simpan post favorit
- β Laporan konten yang melanggar
- β Appeal/banding untuk konten yang dilaporkan
- β Dashboard admin untuk pengelolaan
- β Sistem trust score untuk pengguna
- β Notifikasi
- β Pengaturan profil dan keamanan
Backend:
- Laravel 11.31
- PHP 8.2+
- Livewire 3.6
- Laravel Socialite 5.23 (Google OAuth)
- Spatie Permission 6.21 (Role & Permission)
Frontend:
- Tailwind CSS 4.1
- Vite 5.0
- DaisyUI 5.5
- Alpine.js
- jQuery
- ApexCharts (Grafik)
- DataTables (Tabel)
- Tagify (Tag Input)
Database:
- MySQL/PostgreSQL
Testing:
- Pest PHP 3.6
- PHPUnit
- PHP 8.2 atau lebih tinggi
- Composer
- Node.js & npm
- MySQL/PostgreSQL
# Clone repository
git clone <repository-url>
cd Discussion
# Install PHP dependencies
composer install
# Install Node dependencies
npm install
# Copy environment file
cp .env.example .env
# Generate application key
php artisan key:generate
# Configure database di .env
# DB_CONNECTION=mysql
# DB_HOST=127.0.0.1
# DB_DATABASE=discussion
# DB_USERNAME=root
# DB_PASSWORD=
# Run migrations
php artisan migrate
# Seed database (optional)
php artisan db:seed
# Build frontend assets
npm run build
# Untuk development
npm run dev
# Start server
php artisan serveDiscussion/
βββ app/
β βββ Http/
β β βββ Controllers/ # HTTP Controllers
β β βββ Middleware/ # Custom Middleware
β βββ Models/ # Database Models
β βββ Jobs/ # Queue Jobs
β βββ Notifications/ # Email Notifications
β βββ Providers/ # Service Providers
βββ routes/
β βββ web.php # Web Routes
β βββ console.php # Console Commands
βββ database/
β βββ migrations/ # Database Migrations
β βββ factories/ # Model Factories
β βββ seeders/ # Database Seeders
βββ resources/
β βββ views/ # Blade Templates
β βββ css/ # Stylesheet
β βββ js/ # JavaScript
βββ config/ # Configuration Files
βββ storage/ # Uploaded Files & Logs
βββ tests/ # Test Files
βββ public/ # Public Assets
βββ vendor/ # Dependencies
Model utama untuk pengguna platform.
- Fields: id, name, email, password, email_verified_at, profile_picture, bio, trust_score, suspended_at
- Relations:
- hasOne: UserDetail, UserSetting
- hasMany: Post, Comment, Reaction, Report, Appeal, TrustScoreLog
- belongsToMany: savedPosts (Post)
Model untuk post/diskusi yang dibuat pengguna.
- Fields: id, user_id, title, content, created_at, updated_at
- Relations:
- belongsTo: User
- hasMany: Comment, Reaction, Report, Appeal
- belongsToMany: Tag, Saved (User)
Model untuk komentar pada post.
- Fields: id, post_id, user_id, content, created_at, updated_at
- Relations:
- belongsTo: Post, User
- hasMany: Reaction, Report
Model untuk kategori/tag post.
- Fields: id, name, slug
- Relations:
- belongsToMany: Post
Model untuk reaksi (like/emoji) pada post atau comment.
- Fields: id, user_id, post_id, comment_id, reaction_type, created_at
- Relations:
- belongsTo: User, Post, Comment
Model untuk laporan konten yang melanggar.
- Fields: id, user_id, post_id, comment_id, reason, created_at
- Relations:
- belongsTo: User, Post, Comment
- hasOne: Appeal
Model untuk appeal/banding atas laporan konten.
- Fields: id, report_id, user_id, reason, status, created_at, updated_at
- Relations:
- belongsTo: Report, User
Model untuk post yang disimpan pengguna (Pivot table).
- Fields: user_id, post_id, created_at
- Relations:
- belongsTo: User, Post
Model untuk detail tambahan profil pengguna.
- Fields: id, user_id, phone, address, city, country, website, date_of_birth
- Relations:
- belongsTo: User
Model untuk pengaturan pengguna.
- Fields: id, user_id, email_notification, public_profile, two_factor_enabled
- Relations:
- belongsTo: User
Model untuk log perubahan trust score pengguna.
- Fields: id, user_id, change_amount, reason, created_at
- Relations:
- belongsTo: User
Model untuk token remember me.
- Fields: id, user_id, token, expires_at
Pivot table untuk relasi Post-Tag.
- Fields: post_id, tag_id
Controller untuk halaman utama dan tampilan publik.
home()- Halaman beranda dengan list postlogin()- Tampil form loginregister()- Tampil form registersearch()- Pencarian postnewest()- List post terbaruDetailPost($id)- Detail halaman postProfile($username)- Profil penggunatags()- Halaman list semua tagtagPost($slug)- Post dengan tag tertentusaved()- Post yang disimpan oleh user (protected)post()- Form tambah post (protected)postEdit($id)- Form edit post (protected)EditProfile()- Form edit profil (protected)dashboard()- Dashboard user (protected)settings()- Halaman pengaturan (protected)inbox()- Notifikasi inbox (protected)inboxDetail($id)- Detail notifikasi (protected)
Controller untuk autentikasi Google OAuth.
redirectToGoogle()- Redirect ke Google loginhandlerGoogleCallback()- Handle callback dari Google
Controller untuk CRUD operasi user.
index()- Login/attempt autentikasicreate()- Register user barulogout()- Logout userupdate()- Update profil usergiveAccess($id)- Memberikan akses/role ke userdeleteAccess($id)- Menghapus akses/role user
Controller untuk CRUD post.
store()- Membuat post baruupdate()- Update postdestroy()- Hapus post
Controller untuk CRUD komentar.
store()- Membuat komentar barudestroy()- Hapus komentar
Controller untuk reaksi pada post/comment.
store()- Tambah reaksidestroy()- Hapus reaksi
Controller untuk laporan konten.
store()- Buat laporan kontenindex()- List semua laporan (admin)
Controller untuk appeal/banding laporan.
store()- Buat appealupdate()- Update status appeal (admin)
Controller untuk fungsi admin.
dashboard()- Dashboard admin dengan statistikmanageUsers()- Kelola penggunamanageReports()- Kelola laporanmanageAppeals()- Kelola appeals
Controller untuk pengaturan user.
changePassword()- Ubah passwordupdatePrivacy()- Update pengaturan privasiupdateNotification()- Update pengaturan notifikasi
Controller untuk reset password.
showLinkRequestForm()- Tampil form input emailsendResetLinkEmail()- Kirim link reset ke emailresetPassword($token)- Tampil form buat password baruresetPasswordAttempt()- Proses ubah password
Controller untuk verifikasi email.
notice()- Tampil halaman verifikasi emailverify($id, $hash)- Verifikasi email dengan linkresend()- Kirim ulang email verifikasichangeEmail()- Ubah email
Job untuk memproses reward/insentif ketika laporan konten diterima.
- Menambah trust score reporter
- Mengurangi trust score pembuat konten
- Membuat log perubahan trust score
- Trigger suspensi jika trust score terlalu rendah
Notifikasi hasil keputusan appeal.
- Dikirim ketika admin memutuskan appeal
- Berisi hasil dan alasan keputusan
Notifikasi suspensi akun.
- Dikirim ketika akun pengguna disuspensi
- Berisi alasan dan durasi suspensi
Notifikasi reset password.
- Dikirim link reset password ke email pengguna
- Berisi token dan instruksi
Notifikasi verifikasi email.
- Dikirim link verifikasi email ke email pengguna baru
- Berisi token verifikasi
Notifikasi reaksi pada post/comment.
- Dikirim ketika ada reaksi terhadap post/comment user
- Berisi info siapa yang bereaksi dan konten apa
Middleware custom untuk proteksi route yang memerlukan autentikasi.
- Cek apakah user sudah login
- Cek apakah email user sudah verified
- Cek apakah akun user suspended
GET / - Halaman beranda
GET /login - Form login
GET /register - Form register
POST /login - Attempt login
POST /register - Attempt register
GET /forgotPassword - Form forgot password
POST /forgotPassword - Send reset link
GET /reset-password/{token} - Form reset password
POST /reset-password - Update password
GET /search - Pencarian post
GET /newest - Post terbaru
GET /post/detail/{id} - Detail post
GET /user/profile/{username} - Profil pengguna
GET /tags - List tags
GET /tags/{slug} - Post dengan tag
GET /auth/google - Google OAuth
GET /auth/google/callback - Google callback
GET /saved - Post tersimpan
GET /post/add - Form tambah post
GET /post/edit/{id} - Form edit post
POST /post/save - Simpan post
POST /post/update - Update post
POST /post/delete - Hapus post
GET /user/edit - Form edit profil
POST /profile/update - Update profil
POST /give-access/{id} - Berikan akses
POST /delete-access/{id} - Hapus akses
POST /comment/save - Tambah komentar
POST /comment/delete - Hapus komentar
GET /dashboard - Dashboard user
GET /settings - Pengaturan
POST /settings/changePassword - Ubah password
GET /inbox - Notifikasi
GET /inbox/{id} - Detail notifikasi
GET /email/verify - Halaman verifikasi
GET /email/verify/{id}/{hash} - Verifikasi email
POST /email/verify/resend - Kirim ulang verifikasi
POST /email/verify/change - Ubah email
GET /admin/dashboard - Dashboard admin
GET /admin/users - Kelola pengguna
GET /admin/reports - Kelola laporan
GET /admin/appeals - Kelola appeals
POST /admin/reports/{id}/accept - Terima laporan
POST /admin/reports/{id}/reject - Tolak laporan
create_sessions_table- Sesi penggunacreate_users_table- Data penggunacreate_user_details_table- Detail profilcreate_posts_table- Post/diskusicreate_comments_table- Komentarcreate_tags_table- Tag/kategoricreate_post_tags_table- Relasi post-tagcreate_reactions_table- Reaksicreate_reports_table- Laporan kontencreate_appeals_table- Appeal laporancreate_saved_table- Post tersimpancreate_user_settings_table- Pengaturan usercreate_trust_score_logs_table- Log trust scorecreate_remember_mes_table- Remember me tokens
UserFactory- Generate dummy user untuk testing
CommentSeeder- Seed komentar dummy
- Konfigurasi aplikasi Laravel (timezone, locale, dll)
- Konfigurasi authentication guards dan providers
- Konfigurasi koneksi database
- Konfigurasi storage disk untuk upload file
- Konfigurasi email driver (SMTP, Mailgun, dll)
- Konfigurasi queue driver untuk background jobs
- Konfigurasi session lifetime dan behavior
- Konfigurasi Spatie Permission (role & permission)
- Konfigurasi third-party services (Google, dll)
Buat file .env dengan variabel berikut:
APP_NAME=Discussion
APP_ENV=local
APP_DEBUG=true
APP_URL=http://localhost:8000
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=discussion
DB_USERNAME=root
DB_PASSWORD=
MAIL_MAILER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=587
MAIL_USERNAME=your_username
MAIL_PASSWORD=your_password
MAIL_FROM_ADDRESS=noreply@discussion.local
MAIL_FROM_NAME=Discussion
GOOGLE_CLIENT_ID=your_google_client_id
GOOGLE_CLIENT_SECRET=your_google_client_secret
GOOGLE_REDIRECT_URI=http://localhost:8000/auth/google/callback
QUEUE_CONNECTION=database
SESSION_DRIVER=cookieJalankan test dengan Pest PHP:
# Jalankan semua test
php artisan pest
# Jalankan test spesifik
php artisan pest tests/Feature/AuthTest.php
# Jalankan dengan coverage
php artisan pest --coverage
# Format code dengan Pint
./vendor/bin/pint# Tinker - Interactive shell
php artisan tinker
# Generate model dengan migration
php artisan make:model Post -m
# Generate controller
php artisan make:controller PostController --resource
# Publish vendor assets
php artisan vendor:publish
# Clear cache
php artisan cache:clear
php artisan config:clear
php artisan view:clear
# Queue listener untuk background jobs
php artisan queue:listen- Fork repository ini
- Buat branch fitur (
git checkout -b feature/AmazingFeature) - Commit changes (
git commit -m 'Add some AmazingFeature') - Push ke branch (
git push origin feature/AmazingFeature) - Buat Pull Request
Created with β€οΈ for Discussion Platform
Last Updated: February 2, 2026