Build a Laravel 11 (PHP 8.2) web application named:
“Sistem Informasi Tugas Akhir – Prodi Matematika, Fakultas Sains, Institut Teknologi Sumatera”.
Requirements:
- Use Laravel only (Blade + Tailwind). No Vue or React.
- Database: MySQL/MariaDB.
- Auth: Laravel Breeze (Blade) with email verification and password reset.
- Role & permission: spatie/laravel-permission.
- PDF generation: barryvdh/laravel-dompdf.
- PDF preview: embedded viewer (<iframe>) using local PDF.js (no CDN).
- Storage: storage/app/public with symbolic link.
- All documents must be PDF, previewable and downloadable in the system.
- Locale: Asia/Jakarta, id_ID. All UI text must be in Bahasa Indonesia.
User Roles:
1. Mahasiswa
- Register/login.
- Fill title & abstract.
- Choose supervisor & examiner.
- Select seminar schedule (date & room).
- Upload PDF drafts (proposal, thesis, revisions).
- Print/preview seminar invitation (PDF).
- Fill logbook bimbingan.
- Print Berita Acara (proposal, TA, sidang).
- Track status: Terdaftar → Proposal → TA → Sidang (Lulus).
2. Dosen
- View supervisee list.
- See seminar schedule (as supervisor or examiner).
- Receive seminar invitations and Berita Acara (PDF).
- Supervisors can print/preview logbook PDF.
3. Tim Tugas Akhir
- Validate seminar submissions.
- Validate logbooks.
- Monitor grading submissions.
- Validate Berita Acara (proposal, TA, sidang).
- Replace or assign supervisors.
4. Koordinator Prodi
- All Tim TA features.
- Dashboard monitoring:
* Active, scheduled, graduated students.
* Average thesis duration.
* Thesis title recap.
* Lecturer workload recap (supervisor/examiner).
- Export and print PDF reports.
5. Super Admin
- Full access.
- Manage all users, lecturers, students, titles, schedules, rooms, etc.
---
Database Tables:
- users (id, name, email, password)
- students (user_id, nim, status_ta, judul, pembimbing_id, penguji_id)
- lecturers (user_id, nidn, keahlian)
- supervisors (student_id, lecturer_id, type)
- examiners (student_id, lecturer_id, type)
- rooms (id, nama, lokasi, kapasitas)
- seminar_schedules (student_id, type, date, room_id, status)
- documents (student_id, category, version, filename, path, status)
- logbooks (student_id, lecturer_id, tanggal, ringkasan, status)
- grades (student_id, examiner_id, komponen, skor)
- audit_trails (actor_id, action, entity_type, entity_id, before, after)
---
Features:
- Role-based dashboard.
- Seminar scheduling with room availability check.
- PDF-first workflow:
* Generate and store PDFs for invitations, Berita Acara, logbook, and reports.
* Each version saved and tracked in documents table.
* Preview with iframe using signed route.
* Secure download link via signed route.
- Validation workflows:
* Tim TA validates or rejects with notes.
* Logbook validated by supervisors and Tim TA.
- Notifications (email & in-app) for approvals, schedule changes, and validations.
- Monitoring & analytics for coordinator (charts, average duration, workload, export PDF).
- Audit trail for all validations and changes.
- Dark mode UI (Tailwind).
- All labels and text in Bahasa Indonesia.
---
Routing & Controllers:
- StudentController, LecturerController, ScheduleController,
DocumentController, LogbookController, ValidationController,
ReportController, AdminController.
- Named routes (students.dashboard, schedules.index, documents.preview, etc.)
- Use FormRequest for validation.
- Policies for each model.
- Seeders for demo data (roles, users, dosen, mahasiswa, schedules, PDFs).
---
PDF Templates (Blade views):
- resources/views/pdf/undangan_seminar.blade.php
- resources/views/pdf/berita_acara_proposal.blade.php
- resources/views/pdf/berita_acara_ta.blade.php
- resources/views/pdf/berita_acara_sidang.blade.php
- resources/views/pdf/logbook_bimbingan.blade.php
- resources/views/pdf/laporan_koordinator.blade.php
Each PDF includes:
- ITERA logo, NIM, Nama, Prodi, Tanggal, Ruangan, Pembimbing, Penguji.
- Signature section.
- QR code (simple-qrcode) for signed preview link.
---
Security:
- Signed routes for preview/download.
- Private storage path: storage/app/private/ta/{student_id}/{category}/{version}.pdf
- No direct file exposure.
- MIME validation (PDF only).
- Rate limiting for uploads and regenerations.
- Prevent direct object reference (use UUID or ULID).
---
Testing (PestPHP):
- Only PDF uploads allowed (422 for others).
- Generated PDFs saved and versioned correctly.
- Validation workflow functional.
- Room/time conflict prevented.
- Coordinator PDF reports accurate.
- Role permissions enforced.
---
Deliverables:
- Full Laravel project with migrations, models, controllers, policies, seeders.
- PDF service classes (PdfService, DocumentStorageService, AuditService).
- Blade UI in Bahasa Indonesia.
- README with setup steps and demo accounts.
- All documents are PDF, and can be previewed and downloaded in the system.