# Blueprint: Modern Native PHP Journal Platform

## 1. Arsitektur PHP Native (Custom MVC)
Platform ini menggunakan arsitektur MVC (Model-View-Controller) buatan sendiri (Custom MVC) tanpa framework pihak ketiga. Semua request akan diarahkan ke satu titik masuk (`public/index.php`) menggunakan pola **Front Controller**. 
* **Model**: Berurusan langsung dengan Database menggunakan `PDO` untuk keamanan (Prepared Statements).
* **View**: Berisi HTML dengan TailwindCSS (via CDN atau pre-compiled) dan Alpine.js untuk reaktivitas ringan.
* **Controller**: Menerima request HTTP, memanggil Model, mengatur logika, dan merender View.
* **Core**: Library bawaan untuk mengatur Routing, Session, CSRF, dan koneksi Database.

## 2. Struktur Folder Aplikasi
```text
/ (Root)
├── /app                    # Direktori utama logika backend
│   ├── /Controllers        # Class Controller (misal: AuthController, ArticleController)
│   ├── /Models             # Class Model untuk interaksi DB (misal: User, Article)
│   ├── /Core               # Logic dasar sistem
│   │   ├── Database.php    # Wrapper PDO
│   │   ├── Router.php      # Custom URL Router
│   │   ├── Security.php    # CSRF & Sanitasi XSS
│   │   └── Session.php     # Wrapper PHP $_SESSION
│   └── /Services           # Layanan pihak ketiga (misal: AIReview.php via cURL, Email.php)
├── /config                 # Konfigurasi Global
│   ├── config.php          # Base URL, ENV variables
│   └── database.php        # Kredensial MySQL
├── /public                 # Direktori yang bisa diakses publik (Document Root)
│   ├── .htaccess           # Redirect semua request ke index.php
│   ├── index.php           # Front Controller (Entry point)
│   ├── /assets             # CSS (Tailwind), JS (Alpine/Chart.js), Images
│   └── /uploads            # PDF Articles & profile pictures (Akses dibatasi jika perlu)
└── /views                  # File tampilan (HTML/PHP campur tanpa blade engine)
    ├── /layouts            # Base template (Header, Footer, Sidebar)
    └── /pages              # Halaman spesifik (dashboard.php, submit.php)
```

## 3. Daftar 12 Modul Utama
1. **Authentication & Role Management**: Register, Login aman, reset password, dan pembagian hak akses (RBAC).
2. **Journal Management**: Pengaturan detail jurnal (Nama, ISSN, Aims & Scope, Pedoman Penulis).
3. **Submission System**: Form multi-step (Metadara -> Upload file PDF -> Cover Letter -> Submit).
4. **AI Reviewer Simulation**: Modul cURL ke API Eksternal (Gemini) yang dipanggil via cron atau manual untuk screening awal.
5. **Editorial Workflow**: Dashboard admin/editor untuk memantau status antrean naskah (Desk reject, Out for review, dll).
6. **Reviewer Ecosystem**: Sistem penugasan reviewer, form penilaian kuantitatif & kualitatif, serta limit batas waktu review.
7. **Publication System**: Proses mengubah naskah accepted menjadi terbit (Issue/Volume management, DOI assign placeholder).
8. **Interactive Article Experience**: Halaman detail artikel dengan view PDF terintegrasi, sitasi otomatis, letak UI yang user-friendly dengan Alpine.js.
9. **Author Analytics**: Visualisasi data (views, total download artikel) menggunakan Chart.js di dashboard author.
10. **Research Profile**: Halaman profil publik author yang menampilkan seluruh publikasi dan institusi.
11. **Research Matchmaking**: Fitur rekomendasi reviewer berbasis pencocokan keywords artikel dengan keahlian reviewer.
12. **Research Community**: Sistem diskusi internal artikel/komentar antara editor dan author.

## 4. Role Pengguna
* **Superadmin**: Mengatur seluruh sistem, platform, tema, dan manajemen user global.
* **Journal Manager**: Mengatur setup jurnal (Aim & scope, setup edisi baru, ISSN).
* **Editor-in-Chief**: Punya hak mem-veto hasil akhir (Accept/Reject).
* **Section Editor**: Mengurus satu artikel spesifik, menugaskan reviewer, membaca hasil review.
* **Reviewer**: Menerima/menolak ajakan review, mengisi form review dan rekomendasi.
* **Author**: Submit naskah, merevisi, memonitor status real-time, melihat analytics.
* **Reader (Guest)**: Berinteraksi dengan layout modern, melihat/download artikel, copy format sitasi.

## 5. Permission Utama
* `manage_system`: Superadmin only.
* `manage_journal_settings`: Journal Manager.
* `assign_reviewer`: Editor-in-Chief, Section Editor.
* `editorial_decision`: Editor-in-Chief (Terima/Tolak/Revisi naskah).
* `perform_review`: Reviewer (Terbatas hanya pada artikel yang di-_assign_ kepadanya).
* `submit_article`: Author.

## 6. Alur Besar Submission sampai Publication
1. **New Submission**: Author melengkapi meta (judul, abstrak, keywords) dan upload PDF naskah (Blind manuscript).
2. **Desk Review (Pre-Review)**: Editor memeriksa kesesuaian format/scope. Di sini *AI Review Simulation* beraksi memberi "Early Screening" report (cek plagiasi format, kesesuaian jurnal).
3. **Reviewer Assignment**: Editor-in-Chief mencari dan menugaskan Reviewer (menggunakan *Matchmaking* keyword metadata).
4. **Peer Review**: Reviewer menanggapi -> membaca PDF -> mengisi form penilaian -> memberi rekomendasi (Accept, Minor, Major, Reject).
5. **Editorial Decision**: Editor melihat gabungan skor Reviewer & masukan form, lalu memutuskan (Misal: Major Revision).
6. **Revision**: Author mengupload perbaikan (Versi 2). Kembali ke Editor.
7. **Acceptance & Copyediting**: Naskah final diubah ke dalam bentuk layout/galley.
8. **Scheduling & Publication**: Admin menugaskan naskah ke Volume Y, Nomor X. Status menjadi `Published`.

## 7. Struktur Database Global (Relasional Sederhana)
* `users` (id, name, email, password_hash, role, affiliation)
* `journals` (id, name, description, issn, current_issue_id)
* `issues` (id, journal_id, volume, number, year, is_published)
* `articles` (id, issue_id, submitter_id, title, abstract, status [submitted, reviewing, revision, accepted, published], created_at)
* `article_authors` (id, article_id, name, email, affiliation, is_corresponding)
* `article_files` (id, article_id, file_path, file_type [manuscript, cover_letter, supplementary])
* `reviews` (id, article_id, reviewer_id, round, recommendation, comments_author, comments_editor, status [pending, completed])
* `analytics_logs` (id, article_id, type [view, download], ip_address, created_at)

## 8. Pola Routing Sederhana
Menggunakan kelas `Router` sederhana berbasis array Regex atau request URI murni.
```php
$router->get('/', 'HomeController@index');
$router->get('/login', 'AuthController@showLogin');
$router->post('/login', 'AuthController@processLogin');
$router->get('/dashboard', 'DashboardController@index', ['auth' => true]);
$router->post('/submit', 'ArticleController@store', ['auth' => true, 'role' => 'Author']);
```

## 9. Pola Controller Sederhana
Controller murni berfungsi memanggil service dan passing data ke view.
```php
class AuthController {
    public function processLogin() {
        // 1. Cek CSRF
        // 2. Validasi input
        // 3. Panggil UserModel
        // 4. Set $_SESSION
        // 5. Redirect ke dashboard
    }
}
```

## 10. Pola Model Sederhana (PDO & Prepared Statements)
```php
class ArticleModel extends Database {
    public function getArticleById($id) {
        $stmt = $this->db->prepare("SELECT * FROM articles WHERE id = :id LIMIT 1");
        $stmt->execute(['id' => $id]);
        return $stmt->fetch(PDO::FETCH_ASSOC);
    }

    public function insert(...) { ... }
}
```

## 11. Roadmap Pengembangan Bertahap (MVP -> V3)
* **Tahap 1 (MVP - Minggu 1-2)**: Core System (Routing, Auth, Database). Role Author & Editor. Modul form Pendaftaran Naskah, Upload File, dan Halaman Tampil/Publish PDF.
* **Tahap 2 (Minggu 3-4)**: Peer Review System (Assign Reviewer, Form penilaian) dan Editorial Workflow penuh. UI Dashboard disempurnakan (Tailwind & Alpine js).
* **Tahap 3 (Minggu 5-6)**: Integrasi Analytics (Chart.js views/downloads) & AI Screening menggunakan PHP cURL cronjob. Profiling & Matchmaking author-reviewer.

## 12. Risiko Teknis di Shared Hosting (cPanel) & Mitigasinya
1. **Max Execution Time**: Request cURL ke API AI (Gemini) bisa timeout. 
   * *Mitigasi*: Request AI tidak me-nahan loading web. Gunakan tabel job sementara/menunggu, diselesaikan via "Cron Job" cPanel (berjalan di background per 5 menit).
2. **File Size/Upload Limits Limit (`upload_max_filesize`)**: Naskah jurnal PDF bisa besar.
   * *Mitigasi*: Gunakan chunk/validasi pada level frontend, beri peringatan jika lewati 5MB. Edit `user.ini` atau `.htaccess` jika cPanel mengizinkan (paling tidak max `10M`).
3. **Keamanan Shared Folder**: `DOCUMENT_ROOT` yang tercampur dan rentan kebocoran path file.
   * *Mitigasi*: Pindahkan struktur utama (`/app`, `/config`) DI LUAR public_html, atau lindungi penuh dengan `.htaccess` `Require all denied`.
4. **Limits & Resources (CPU/Memory)**: Host biasa suspend web berat.
   * *Mitigasi*: Hindari SELECT *, batasi cron ke max 5 execs per menit, index tabel database yang sering dicari.

## 13. Prioritas MVP (Yang pertama harus di-coding)
1. **Core Foundation**: Setup Custom Router, PDO Class, Middleware pengecekan Session & Security (CSRF generator).
2. **Auth System**: Login, Register dengan `password_hash()` dan RBAC (Author vs Editor).
3. **Dashboard View**: Integrasikan struktur Base Template TailwindCSS & Dashboard Sidebar Navigation.
4. **Submission Flow**: Halaman Author mengunggah formulir. Validasi keamanan MIME types PDF dan Prepared statement simpan data naskah.

## 14. Validasi Batasan Teknis (Constraint Validation)
Rancangan ini telah divalidasi ketat terhadap seluruh batasan yang diberikan:
- **Tanpa Framework Backend Besar**: [LULUS] Menggunakan Custom MVC buatan sendiri (0% Laravel/CI/Symfony).
- **Tanpa Node.js/JavaScript Backend**: [LULUS] Murni PHP Native 8.1+ untuk backend.
- **Tanpa VPS/Docker**: [LULUS] File siap diunggah langsung ke `public_html` cPanel.
- **Tanpa WebSocket/Queue Permanen**: [LULUS] Background process (termasuk AI) murni menggunakan fitur standar Cron Job cPanel.
- **Database Memenuhi Syarat**: [LULUS] Murni MySQL/MariaDB. [LULUS] Tanpa MongoDB/Firebase. [LULUS] Menggunakan PDO dan Prepared Statements secara ketat.
- **Frontend Stack**: [LULUS] Murni HTML terpisahkan dalam folder `/views`, menggunakan TailwindCSS, Alpine.js, dan Chart.js (via CDN atau aset lokal).
- **Tanpa Syarat Composer di Production**: [LULUS] Library eksternal (jika ada) dapat diunggah secara manual via File Manager FTP.
- **AI Integration**: [LULUS] Memanggil API Gemini/lainnya secara native menggunakan cURL PHP (terjadwal atau *on-the-fly* dibatasi timeout).

Blueprint ini dijamin **100% compatible** untuk environment standard cPanel Shared Hosting.
