Platform pelaporan dan pengelolaan sampah berbasis peta interaktif untuk pemerintah daerah.
Warga melaporkan, petugas menangani, semua terpantau secara real-time.
- Fitur Utama
- Stack Teknologi
- Struktur Peran Pengguna
- Alur Status Laporan
- Persyaratan Server
- Instalasi Lokal (XAMPP)
- Deploy ke Hosting (cPanel / Shared Hosting)
- Konfigurasi .env
- Struktur Direktori
- Skema Database
- Data Dummy
- Akun Default Seeder
| Fitur | Keterangan |
|---|---|
| Pelaporan berbasis GPS | Warga mengambil foto + koordinat GPS otomatis terdeteksi via browser |
| Validasi wilayah | Laporan divalidasi masuk batas wilayah kota menggunakan algoritma point-in-polygon GeoJSON |
| Deteksi duplikasi | Mencegah laporan ganda dalam radius 10 meter dari laporan aktif |
| Hotspot berulang | Lokasi yang pernah dilaporkan sebelumnya otomatis ditandai sebagai hotspot prioritas |
| Peta interaktif publik | Peta sebaran laporan real-time terbuka untuk umum tanpa login |
| Manajemen laporan Dinas | Petugas dinas mengelola laporan via peta interaktif dengan filter status |
| Manajemen laporan Admin | Admin dapat ubah status bebas, hapus, dan bulk aksi laporan |
| Notifikasi email otomatis | Email konfirmasi saat laporan masuk, dan notifikasi saat laporan selesai |
| Pengaturan sistem | Logo, nama kota, SMTP, radius duplikasi, batas GeoJSON, timezone — semua via panel admin |
| SweetAlert2 | Semua dialog konfirmasi/aksi menggunakan SweetAlert2 (bukan native browser alert) |
| Mobile-first | Responsif penuh untuk smartphone, tablet, dan iPhone (safe viewport height) |
| White-label | Dapat dikonfigurasi untuk kota/daerah mana pun tanpa mengubah kode |
- Backend: PHP 8.2+, CodeIgniter 4.7
- Database: MySQL / MariaDB
- Frontend: Bootstrap 5.3, Bootstrap Icons 1.11
- Peta: Leaflet.js 1.9.4 + OpenStreetMap
- Chart: Chart.js 4.4
- Dialog: SweetAlert2 v11
- Font: Poppins (Google Fonts)
- Email: PHPMailer via konfigurasi SMTP dinamis (disimpan di tabel
settings)
| Peran | Akses |
|---|---|
| Masyarakat | Kirim laporan, lihat riwayat laporan sendiri, edit profil |
| Dinas | Dashboard statistik, kelola laporan via peta (advance / reject), edit profil |
| Admin | Semua akses Dinas + manajemen user, manajemen semua laporan, pengaturan sistem |
pending → reviewed → in_progress → cleaned
↘
rejected
- pending — baru dikirim warga, menunggu verifikasi
- reviewed — diterima & dijadwalkan
- in_progress — petugas sedang menangani di lapangan
- cleaned — area berhasil dibersihkan
- rejected — ditolak (di luar wilayah / duplikat / gambar tidak valid / manual)
Catatan: Status
pendingdanrejectedtidak ditampilkan di peta publik.
- PHP 8.2 atau lebih tinggi
- MySQL 5.7+ / MariaDB 10.4+
- Apache dengan mod_rewrite aktif
- Ekstensi PHP:
intl,mbstring,json,mysqlnd,libcurl,gdatauimagick
# 1. Clone atau ekstrak project ke htdocs
cd C:/xampp/htdocs/project-website/
# (letakkan folder sampahan di sini)
# 2. Install dependencies
cd sampahan
composer install
# 3. Salin file environment
copy env .env
# 4. Edit .env — minimal isi bagian ini:
# app.baseURL = 'http://localhost/project-website/sampahan/public/'
# database.default.hostname = localhost
# database.default.database = sampahan
# database.default.username = root
# database.default.password = root
# 5. Buat database
# Buka phpMyAdmin dan buat database bernama: sampahan
# 6. Jalankan migrasi & seeder
php spark migrate
php spark db:seed DatabaseSeeder
# 7. (Opsional) Data dummy 35 laporan area Tangerang Selatan
php spark db:seed DummyReportSeederBuka browser: http://localhost/project-website/sampahan/public/
- Upload seluruh isi folder
sampahan/kepublic_html/ - File
.htaccessdi root sudah dikonfigurasi untuk meneruskan traffic kepublic/ - Tidak perlu mengubah apapun di
public/.htaccess
- Set document root subdomain ke
public_html/sampahan/public/ - Upload seluruh folder ke
public_html/sampahan/
- Upload ke
public_html/sampahan/ - Edit
.htaccessroot project, ubah baris:menjadi:RewriteBase /RewriteBase /sampahan/ - Edit
.env:app.baseURL = 'https://example.com/sampahan/'
# Di terminal hosting (SSH) atau via phpMyAdmin:
php spark migrate
php spark db:seed DatabaseSeederPastikan folder writable/ memiliki permission 755 atau 777.
Salin file env menjadi .env dan sesuaikan:
CI_ENVIRONMENT = production
app.baseURL = 'https://yourdomain.com/'
database.default.hostname = localhost
database.default.database = nama_database
database.default.username = user_database
database.default.password = password_database
database.default.DBDriver = MySQLi
database.default.port = 3306SMTP email dikonfigurasi via panel Admin → Pengaturan Sistem, bukan di
.env.
sampahan/
├── .htaccess ← Root rewrite rules (routing ke public/)
├── .env ← Konfigurasi environment (jangan di-commit)
├── app/
│ ├── Config/
│ │ ├── Routes.php ← Semua route aplikasi
│ │ └── ...
│ ├── Controllers/
│ │ ├── Admin/ ← DashboardController, UserController, SettingsController, ReportController
│ │ ├── Auth/ ← AuthController, ForgotPasswordController
│ │ ├── Dinas/ ← DashboardController, MapController, ProfileController
│ │ ├── Masyarakat/ ← DashboardController, ReportController, ProfileController
│ │ └── Public/ ← LandingController (beranda & peta publik)
│ ├── Database/
│ │ ├── Migrations/ ← 4 migrasi: users, settings, reports, report_logs
│ │ └── Seeds/ ← DatabaseSeeder, DummyReportSeeder
│ ├── Filters/
│ │ ├── AuthFilter.php ← Cek session login
│ │ └── RoleFilter.php ← Cek role (admin/dinas/masyarakat)
│ ├── Models/
│ │ ├── ReportModel.php ← Logic duplikasi, hotspot, GeoJSON, status transition
│ │ ├── UserModel.php
│ │ ├── SettingModel.php
│ │ └── ReportLogModel.php
│ ├── Services/
│ │ ├── DynamicMailer.php ← PHPMailer dengan konfigurasi SMTP dari DB
│ │ └── ImageAnalysisService.php
│ ├── Libraries/
│ │ └── GeoHelper.php ← Point-in-polygon & Haversine distance
│ └── Views/
│ ├── layouts/
│ │ ├── _base.php ← Layout utama (Bootstrap + Leaflet + SweetAlert2)
│ │ ├── admin.php ← Sidebar admin
│ │ ├── dinas.php ← Sidebar dinas
│ │ ├── masyarakat.php ← Sidebar masyarakat
│ │ └── public.php ← Layout halaman publik
│ ├── admin/ ← Views admin
│ ├── dinas/ ← Views dinas
│ ├── masyarakat/ ← Views masyarakat
│ ├── public/ ← landing.php, map.php
│ └── emails/ ← Template email HTML
├── public/
│ ├── index.php ← Entry point
│ ├── .htaccess ← Remove index.php dari URL
│ └── uploads/ ← Foto laporan, logo, favicon
└── writable/
├── logs/ ← Log error CI4
├── cache/
└── session/
| Kolom | Tipe | Keterangan |
|---|---|---|
| id | INT | Primary key |
| name | VARCHAR(150) | Nama lengkap |
| VARCHAR(191) | Unique | |
| password | VARCHAR(255) | Bcrypt |
| role | ENUM | admin / dinas / masyarakat |
| is_active | TINYINT | 0 = nonaktif |
| activation_token | VARCHAR | Token aktivasi email |
| reset_token | VARCHAR | Token reset password |
| Kolom | Tipe | Keterangan |
|---|---|---|
| id | INT | Primary key |
| user_id | INT | FK → users |
| latitude | DECIMAL(10,7) | Koordinat GPS |
| longitude | DECIMAL(10,7) | Koordinat GPS |
| photo_path | VARCHAR | Relatif ke public/ |
| description | TEXT | Deskripsi dari pelapor |
| status | ENUM | pending / reviewed / in_progress / cleaned / rejected |
| admin_note | TEXT | Catatan petugas |
| is_recurrent_hotspot | TINYINT | 1 = hotspot berulang |
| rejection_reason | ENUM | outside_boundary / duplicate_active / invalid_image / manual |
Menyimpan riwayat setiap perubahan status beserta siapa yang mengubah dan catatan.
Pasangan key → value untuk konfigurasi aplikasi (nama, logo, SMTP, GeoJSON batas, dst).
Mengisi 35 laporan sampah tersebar di area Kota Tangerang Selatan:
php spark db:seed DummyReportSeederSeeder membutuhkan akun dinas@sampahan.id dan masyarakat@sampahan.id sudah ada (dibuat oleh DatabaseSeeder).
Setelah menjalankan php spark db:seed DatabaseSeeder:
| Role | Password | |
|---|---|---|
| Admin | admin@sampahan.id |
Admin@1234 |
Ganti semua password default segera setelah deploy ke production.
Project ini dikembangkan untuk keperluan penelitian.
Framework CodeIgniter 4 dilisensikan di bawah MIT License.