Skip to content

College Registrar Document System

A legacy PHP registrar rewritten with public request tracking and multi-step clearance workflows.

2026Laravel, Vue, Inertia, MySQL, Reverb

Problem

Document requests moved through manual forms, payment checks, department clearances, and release handoffs. The workflow needed one role-aware system with traceable request states and secure file handling.

Constraints

  • Students, admins, departments, and super admins need separate role paths
  • Payment proof, signatures, QR codes, avatars, and PDFs must be stored behind authorized access
  • Request lifecycle needs auditable states across payment, clearance, release, and claiming
  • Realtime notifications should work through Laravel Reverb/Echo private channels
  • Testing must cover PHP behavior and browser-facing workflows

Key Decisions

  1. Laravel/Inertia over a split SPA and API

    The system needed rich Vue screens but also server-side routing, policies, forms, validation, and Laravel-first maintainability.

    Used Inertia to keep Vue pages while letting Laravel own routes, authorization, validation, and workflow orchestration.

    Trade-off: Less API reuse than a separate REST backend, but faster delivery and a simpler operational model for an internal school system.
  2. Private file controllers over public storage links

    Receipts, signatures, claim slips, and request documents can contain sensitive student or payment information.

    Serve sensitive files through authorized Laravel controllers instead of exposing raw public storage paths.

    Trade-off: More controller and policy code, but the access model is explicit and auditable.
  3. Realtime notifications through Reverb

    Admins and students need request/payment/clearance changes to appear without manual refresh.

    Use Laravel Reverb with Echo and private channels for realtime notification delivery.

    Trade-off: Adds another runtime process, but keeps realtime behavior inside the Laravel ecosystem.
Role
Sole engineer
Timeline
Apr 2026 - Oct 2026
Stack
Laravel, Vue, Inertia, MySQL, Reverb, Tailwind CSS, Pest, Playwright