# Arsitektur

## Bentuk awal
Monolit modular Laravel: satu aplikasi, satu basis data MySQL, UI server-rendered Blade dengan Livewire untuk interaksi dan Alpine.js untuk perilaku ringan. Tailwind untuk styling. Pisahkan domain melalui modul/namespace, layanan aplikasi, validasi, kebijakan akses, dan event internal seperlunya; hindari microservices pada skala awal.

## Batas domain
Admissions, Academic Core, Learning, Finance, Student Affairs, Graduation, Identity & Access, Reporting, Integration. Hubungan dan entitas inti di [model data](05-model-data.md); rincian modul di [modul](06-modul.md).

## Infrastruktur
Web server → Laravel `public/` → MySQL. File privat disimpan di storage nonpublik. Scheduler dijalankan cron cPanel; antrean gunakan driver yang tersedia dan teruji, dengan pemrosesan terjadwal bila worker persisten tidak tersedia. Feeder privat dijangkau melalui Feeder Bridge kampus; lihat [integrasi](09-neo-feeder.md).

## Prinsip desain
- Gunakan transaksi untuk perubahan akademik/keuangan yang harus atomik.
- Validasi aturan domain di server, bukan hanya tampilan.
- Simpan kode periode dan konfigurasi yang dapat berubah sebagai data.
- Pisahkan antarmuka adapter Feeder dari kasus penggunaan akademik.
- Gunakan pagination, indeks berdasarkan pola akses, dan ekspor bertahap.
- Pertahankan portability: konfigurasi melalui environment, file storage terabstraksi, tidak bergantung pada daemon yang tidak tersedia di shared hosting.

## Batasan / terbuka
Satu instalasi melayani satu kampus. Agar dapat dipakai kampus lain, identitas/branding, struktur organisasi, kalender, periode, kurikulum, skala nilai, dan kebijakan harus berupa konfigurasi atau data, bukan asumsi yang tertanam dalam kode. Tidak diperlukan isolasi tenant dalam satu database. Versi tepat dependency harus dipastikan kompatibel dengan Laravel 13 dan PHP 8.3 saat bootstrap. Kapasitas, engine database, batas proses, cron minimum, dan worker cPanel perlu diuji pada provider.
