60 Commits

Author SHA1 Message Date
GuavaPopper 4907ff7ef8 chore: remove --prefer-dist from composer install to allow fallback to git source 2026-06-11 00:18:09 +07:00
GuavaPopper 4e19f27522 Bismillah 2026-06-10 23:13:30 +07:00
GuavaPopper 1b3031a1ab feat: add entrypoint script to handle environment configuration, database readiness, and service startup 2026-06-10 22:34:56 +07:00
GuavaPopper 70d6efdec6 chore: optimize Dockerfile build stages by deferring composer scripts and autoload dumping to final stage 2026-06-10 21:09:21 +07:00
GuavaPopper 2f8b14ed2a fix: make Coolify image self-contained 2026-06-10 20:38:59 +07:00
GuavaPopper 69b03fb467 chore: prepare repository for new remote 2026-06-10 19:00:07 +07:00
GuavaPopper 056520d48f chore: remove hardcoded ports for Coolify 2026-06-10 18:56:19 +07:00
GuavaPopper 18c0e1d489 . 2026-06-10 18:43:14 +07:00
GuavaPopper db5b20c572 . 2026-06-10 18:32:09 +07:00
GuavaPopper 024873cfb7 . 2026-06-10 18:27:04 +07:00
GuavaPopper f4b9501d50 chore: remove docs and tests from deploy package 2026-06-10 18:18:37 +07:00
GuavaPopper d85d066f6c feat: refresh UI and add sidebar navigation 2026-06-10 18:16:46 +07:00
GuavaPopper c4157cec8d feat: add dashboard transfer and assistance summaries 2026-06-10 18:13:40 +07:00
GuavaPopper 91fc2fbd16 fix: support sqlite database backups 2026-06-10 18:11:09 +07:00
GuavaPopper cdba16e9e5 chore: add Docker deployment setup 2026-06-10 18:08:57 +07:00
GuavaPopper 66cfbbd523 feat: add permohonan transfer page with approve/reject workflow and nav links
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-05 05:01:40 +07:00
GuavaPopper 64f3427d4e fix: prevent IDOR in transfer store — verify pengurus owns dari_ibadah
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-05 04:59:01 +07:00
GuavaPopper 652bcb102d feat: add anggota and bantuan buttons to miskin popup on map
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-05 04:58:39 +07:00
GuavaPopper deefa7a126 feat: add anggota keluarga and riwayat bantuan modals to data page
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-05 04:57:01 +07:00
GuavaPopper 804618bb54 feat: add controllers and routes for anggota, bantuan, permohonan transfer
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-05 04:55:11 +07:00
GuavaPopper e907100175 feat: add AnggotaKeluarga, RiwayatBantuan, PermohonanTransfer models and migrations
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-05 04:52:23 +07:00
GuavaPopper 9bd5506f4f docs: add professor's feature suggestions to missing_features.md
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-05 04:41:13 +07:00
GuavaPopper 69ca5ab8dc docs: rewrite README quick-start — add demo accounts, auto-steps table, common commands
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-05 04:28:51 +07:00
GuavaPopper 4929eda91d docs: mark A-03 complete — all SKPL features now implemented
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-05 04:27:10 +07:00
GuavaPopper 2bd7b206a6 feat: add system configuration (A-03) — map center, zoom, radius min/max
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-05 04:25:58 +07:00
GuavaPopper 6fa793aec3 docs: mark Plan 7 complete — stats, scheduled backup, notifications, restore
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-04 14:56:59 +07:00
GuavaPopper a0e2fda83e test: add tests for stats, notifications, backup list/command, restore
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-04 14:55:44 +07:00
GuavaPopper b76284d8b7 feat: add database restore from uploaded SQL file with RESTORE confirmation
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-04 14:53:36 +07:00
GuavaPopper 3ecf7d937c feat: add data change notifications via 30s polling for all roles
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-04 14:52:25 +07:00
GuavaPopper f77fc725a8 feat: add scheduled daily backup, stored backup listing and download
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-04 14:51:07 +07:00
GuavaPopper 1535c75138 feat: add usage statistics section to activity log page
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-04 14:47:39 +07:00
GuavaPopper 5ad1ba36b8 docs: mark Plan 6 complete — admin advanced features, update README
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-04 14:30:29 +07:00
GuavaPopper e457bbb09c test: add tests for bulk delete, CSV import, activity log, backup
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-04 14:29:17 +07:00
GuavaPopper 27eca4f041 feat: add activity log admin page and nav links
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-04 14:28:00 +07:00
GuavaPopper c4eb884495 feat: add database backup download via mysqldump (admin-only)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-04 14:26:04 +07:00
GuavaPopper 2d4533683d feat: add CSV import for ibadah and miskin (admin-only, round-trip format) 2026-06-03 21:00:28 +07:00
GuavaPopper 6d157a17c9 feat: add bulk delete for ibadah and miskin with checkboxes (admin-only) 2026-06-03 20:59:08 +07:00
GuavaPopper cb3933541d feat: log create/update/delete/login activity across controllers 2026-06-03 20:56:50 +07:00
GuavaPopper 7fb649f690 feat: add ActivityLog model and migration with record() helper 2026-06-03 20:55:30 +07:00
GuavaPopper 1fcad7d9b2 feat: Plan 5 — Ekspor PDF + Ekspor per Radius + Cetak Laporan
- Add ExportController: allMiskinPDF (all data) + radiusMiskinPDF
  (server-side Haversine filtering per ibadah radius)
- Add two table-based PDF Blade views (dompdf-compatible, no flexbox/grid)
- Add export routes (/export/pdf, /export/pdf/radius/{id}/{radius})
  with numeric route constraints
- Add "Ekspor PDF" button to data tabular view
- Add CSV + PDF radius export buttons to map analysis panel;
  exportRadiusCSV() reuses existing isInside(); PDF href synced on
  ibadah click and radius slider change
- 5 new tests: access control, PDF content-type, 404 + param validation
- Mark K-04 and Section 5 (Cetak & Ekspor) complete in missing_features.md
- Update README with export features

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-03 20:44:10 +07:00
GuavaPopper 4649a983ef feat: install barryvdh/laravel-dompdf for PDF generation 2026-06-03 14:44:19 +07:00
GuavaPopper f855f7e027 feat: Plan 4 — Dashboard Statistik + Gap Analysis
- Add /dashboard route (all authenticated roles)
- Add dashboard view with Chart.js 4.4:
  - 4 stat cards (ibadah, miskin, jiwa, % terjangkau)
  - Donut chart: ibadah per jenis
  - Horizontal bar chart: miskin per kondisi rumah
  - Gap Analysis: Turf.js coverage computation, doughnut chart,
    per-ibadah coverage table sorted by KK count, uncovered family list
  - esc() helper applied to all user-data innerHTML
- Add Dashboard nav link to map, data, and admin views
- 5 new tests: unauthenticated redirect + all 4 roles can access
- Mark K-02 and K-03 complete in missing_features.md
- Update README with new page and feature section

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-03 14:19:37 +07:00
GuavaPopper c1c1fae93c fix: escape user-controlled fields in admin/users innerHTML to prevent stored XSS
u.name and u.email are stored user input and were interpolated raw into
tbody.innerHTML. Added esc() helper and applied to name, email, and role
display string.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-03 13:53:01 +07:00
GuavaPopper 8476c5d643 feat: Plan 3 — Manajemen Pengguna (Admin User Management)
- Add AdminUserController: CRUD users, assign role, reset password,
  self-delete guard (403 on own account)
- Add admin route group under role:administrator middleware
  (GET/POST/PUT/DELETE /api/admin/users, PUT /api/admin/users/{id}/password)
- Add resources/views/admin/users.blade.php: DaisyUI table + 4 modals
  (create, edit, reset password, delete confirm), stats grid, toast
- Add Admin nav link (administrator-only) to map and data navbars
- 9 new tests covering page access, API CRUD, self-delete guard, password reset
- Mark Plan 3 complete in missing_features.md; update README page list
- Save plan3 to docs/ for reference

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-03 13:51:08 +07:00
GuavaPopper 2e2b42f96b feat: Plan 2 — Form Edit Rumah Ibadah & Keluarga Miskin + Ownership
- Add user_id FK (nullable) to rumah_ibadah for ownership tracking
- IbadahController: set user_id on store; enforce ownership on update/destroy
- Add edit modals to map and data views (ibadah + miskin)
- Popup and table row Edit buttons with per-record ownership check
- 7 new tests covering ownership and full-field updates
- Fix ExampleTest for auth-protected routes
- Fix UserFactory missing email_verified_at column
- Mark Plan 2 complete in missing_features.md; update README

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-02 20:29:36 +07:00
GuavaPopper 15294a5d2f docs: update missing_features.md — mark Auth & RBAC complete, add ownership gap 2026-06-02 20:07:10 +07:00
GuavaPopper 38199d5860 feat: add demo accounts for all 4 roles in seeder 2026-06-02 19:55:25 +07:00
GuavaPopper 3310efe77e fix: restore Docker env settings and auto-seed on container start 2026-06-02 19:51:21 +07:00
GuavaPopper 5683cd3b0e feat: add auth navbar and role-aware UI to all views
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-02 19:34:17 +07:00
GuavaPopper f609c1efa7 feat: add custom login view with map background 2026-06-02 19:28:26 +07:00