# Identitas Proyek

- Nama: **Virtual Lab Fotografi Dasar**.
- Tujuan: membantu pembelajaran konsep fotografi dasar melalui kamera perangkat, kontrol Pro edukatif, penjelasan, latihan, pengambilan foto, dan perbandingan hasil.
- Pengguna: guru serta siswa Kelas X DKV.
- Konsep: kamera asli HP/laptop menjadi live view dan sumber foto; kontrol fotografi disajikan seperti mode Pro untuk belajar.
- Posisi produk: alat latihan konsep dasar dan prapraktikum, bukan pengganti penuh pengalaman kamera DSLR.

# Sumber Keputusan

- `Panduan_Pengembangan_Virtual_Lab_Fotografi_v2_Kamera_Pro_Edukatif.pdf` versi 2.0 adalah sumber keputusan utama.
- Keputusan terbaru pengguna mengalahkan keputusan lama.
- Setiap perubahan penting dicatat di `DECISIONS.md` dan dampak fase dicatat di `CHANGELOG.md`.
- Jangan menggunakan asumsi, arsitektur, database, aset, atau konsep proyek lama tanpa persetujuan pengguna.
- Pengguna adalah pemilik keputusan; pengembangan mengikuti workflow human-in-the-loop.

# Teknologi yang Dikunci

- PHP native dengan MVC sederhana.
- MySQL atau MariaDB.
- HTML5, CSS3, dan JavaScript vanilla.
- MediaDevices API, MediaStreamTrack API, dan Canvas 2D.
- XAMPP atau Laragon untuk development; HTTPS wajib untuk produksi.
- Node.js bukan syarat runtime dan framework frontend besar tidak digunakan.

# Arah Tampilan

Dashboard siswa mempunyai menu:

1. Materi
2. Virtual Lab
3. Simulasi Komposisi
4. Kuis
5. Digital Project
6. Hasil & Nilai
7. Progress Belajar
8. Profil
9. Panduan

Karakter UI:

- bersih, modern, dan ramah siswa;
- kartu menu besar dengan sudut membulat dan bayangan ringan;
- warna aksen biru atau ungu yang konsisten;
- responsif untuk desktop, tablet, dan HP;
- ikon sederhana dan kontrol sentuh yang mudah digunakan;
- area kamera dominan pada halaman Virtual Lab;
- tidak menyerupai admin dashboard generik.

# Konsep Kamera

- Kamera tidak aktif otomatis; pengguna harus menekan **Aktifkan Kamera**.
- Permintaan kamera wajib memakai `audio: false` dan memprioritaskan kamera belakang pada HP.
- Stream wajib dihentikan saat kamera dimatikan, kamera diganti, pengguna keluar halaman, atau logout.
- Periksa capability dan settings perangkat; jangan mengarang dukungan hardware.
- ISO, shutter speed, dan aperture tetap tampil sebagai slider pembelajaran.
- Setiap kontrol wajib memiliki badge **NYATA**, **SIMULASI**, atau **OTOMATIS** berdasarkan keadaan aktual.
- Status **NYATA** hanya boleh digunakan setelah kontrol didukung, penerapan constraint berhasil, dan hasil diverifikasi sejauh API memungkinkan.
- Efek yang tidak dapat diterapkan pada hardware disimulasikan secara transparan.
- Foto asli dan hasil simulasi disimpan sebagai file serta path yang terpisah.
- Nilai simulasi tidak boleh ditulis atau diklaim sebagai EXIF hardware.
- Tidak menyimpan frame tanpa tindakan shutter dari pengguna.

# Aturan Pengembangan

- Sebelum mengerjakan tugas, baca `AGENTS.md`, `PROJECT_STATUS.md`, lalu hanya dokumen relevan di `docs/`.
- Gunakan vertical slice: selesaikan satu alur sampai database, keamanan, error handling, dan acceptance test sebelum memperluas fitur.
- Jangan membuat placeholder sebagai hasil akhir.
- Jangan menambah dependency besar tanpa izin dan jangan memakai CDN sebagai dependency runtime utama.
- Gunakan PDO dan prepared statement.
- Gunakan `password_hash()` dan `password_verify()` untuk kredensial.
- Terapkan role guard pada seluruh route dan aksi yang dilindungi.
- Gunakan CSRF untuk seluruh perubahan data.
- Validasi dan otorisasi input di server; cegah IDOR dengan pemeriksaan kepemilikan/role.
- Lindungi upload dan storage: validasi MIME dengan `fileinfo`, batas ukuran, nama acak, path relatif, folder non-executable, dan tanpa paparan path internal.
- Jangan merusak fitur yang telah lulus pengujian.
- Backup database sebelum migration penting.
- Buat checkpoint setelah fase penting dan perbarui status, keputusan, TODO, serta changelog.
- Fitur hanya selesai jika alur, database, keamanan, error handling, dan pengujiannya lulus.

# Aturan Hemat Token

Untuk setiap tugas berikutnya:

- baca `AGENTS.md`;
- baca `PROJECT_STATUS.md`;
- baca hanya dokumen yang relevan;
- jangan menjelaskan ulang seluruh konteks;
- jangan menampilkan ulang isi file lengkap kecuali diminta;
- laporkan hanya:
  1. file yang dibuat atau diubah;
  2. perubahan database;
  3. URL pengujian;
  4. hasil acceptance test;
  5. masalah tersisa.

# Larangan

- Jangan merekam audio.
- Jangan merekam video.
- Jangan mengaktifkan kamera tanpa tindakan pengguna.
- Jangan mengklaim kontrol hardware yang tidak tersedia.
- Jangan memalsukan EXIF.
- Jangan menyalin logo, merek, aset, desain identik, teks, atau kode Canon Play; Canon Play hanya referensi pola interaksi.
- Jangan menambahkan AI image analysis.
- Jangan membuat aplikasi mobile native.
- Jangan menggunakan CDN sebagai dependency runtime utama.
- Jangan mengganti teknologi tanpa persetujuan pengguna.

