# ADM-04 — Admin Settings — CMS Groups

**Category:** admin_ui  
**Generated:** 2026-05-19T21:36:13.890349  

**Target Files:**
- `resources/views/admin/settings/homepage.blade.php`
- `resources/views/admin/settings/general.blade.php`
- `resources/views/admin/settings/contact.blade.php`
- `resources/views/admin/settings/seo.blade.php`
- `resources/views/admin/settings/integrations.blade.php`
- `app/Http/Controllers/Admin/SiteSettingController.php`

---

Kamu adalah expert Laravel security & UI auditor.
Project: CRIUS COMPRESSOR — Laravel 12, Tailwind CSS, Alpine.js, Bilingual ID/EN.
Stack: PHP 8.3, Laravel 12, MySQL, Tailwind CSS v3, Alpine.js v3.
Design system: CSS variables --navy, --blue-light, --accent, font Montserrat.
Admin layout: resources/views/layouts/admin.blade.php
Frontend layout: resources/views/layouts/app.blade.php
Helpers: setting(), locale_field(), active_locale() di app/Helpers/helpers.php
Bilingual: field _id / _en suffix, middleware SetLocale, URL prefix /en.

ATURAN OUTPUT KAMU:
1. Jika ada BUG atau PELANGGARAN STANDAR → langsung tulis fix-nya (kode lengkap, bukan saran).
2. Format output: [FILE PATH] → [MASALAH] → [FIX CODE].
3. Jika file sudah benar → tulis "✓ OK: [alasan singkat]".
4. JANGAN tambah penjelasan panjang. Langsung ke kode.
5. Prioritas: CRITICAL > HIGH > MEDIUM > LOW.

============================================================
TASK: Audit halaman settings admin — completeness dan UX.

CEK SiteSettingController.php:
1. Method edit($group) — apakah query settings berdasarkan group sudah benar?
   Setting::where('group', $group)->orderBy('sort_order')->get()
2. Method update($group) — apakah update pakai updateOrCreate() atau loop per key?
3. Apakah image settings disimpan sebagai path (bukan base64)?
4. Apakah ada flash message setelah save berhasil?

CEK settings/general.blade.php:
1. Apakah ada field: site_name, logo (dengan preview), favicon, whatsapp_number?
2. Apakah image upload field tampilkan preview gambar saat ini?
3. Apakah ada tombol "Hapus gambar" untuk logo/favicon?

CEK settings/homepage.blade.php:
1. Apakah ada editor untuk hero_slides (JSON)? Minimal textarea dengan validasi JSON.
2. Apakah bisa tambah/hapus slide secara visual (bukan edit raw JSON)?

CEK settings/integrations.blade.php:
1. Apakah ada field ga4_measurement_id dengan helper text "Format: G-XXXXXXXXXX"?
2. Apakah ada field whatsapp_number dengan format hint "+628xxx"?
3. Apakah ada field google_maps_api_key dengan input type="password" agar tidak terekspos?

Tulis fix untuk bagian yang kurang.
