StudyFlow ERP & Academic Analytics Engine
An enterprise academic ERP and performance tracking portal designed to automate grading workflows, advisor intervention channels, and multi-tenant student tracking. Features dynamic Vite + Vue 3 client-side analytics dashboards and a native custom Object-Oriented PHP REST API engine protected by JWT authentication middleware.
Tech Stack
Stakeholders
Academic Advisors
Monitor student tracking systems, manage academic intervention alerts, and evaluate peer performance matrices
Lecturers / Instructors
Manage course assessment components, submit grading records, and review re-marking requests
Students
Track grades, review performance against peer averages, and submit academic re-marking requests
Zafran (Lead Architect)
Designed the multi-role state engine, built the OOP PHP service engine, secure JWT interceptors, and Docker orchestration layers
The Problem
Traditional educational facilities rely on outdated, manual grading spreadsheets and disjointed, error-prone academic record keeping. This fragmentation slows down advisor intervention loops, makes real-time student performance comparison extremely difficult, and leaves student grade-remarking workflows opaque and unmonitored.
The Solution
Engineered StudyFlow, a multi-tenant academic ERP designed with a decoupled client-server model. It implements dynamic Vue 3 dashboards tailored for administrators, lecturers, academic advisors, and students. The backend utilizes a Native OOP PHP REST API with Custom JWT authentication middleware, orchestrating grading pipelines, peer matrices, and re-marking loops inside a containerized Docker-Compose stack.
Architecture
StudyFlow uses a strictly decoupled, service-oriented structure. The frontend is a Vue 3 Single Page Application (SPA) powered by Vite, utilizing Pinia for client-side state hydration and Vue Router role guards for navigation restrictions. The backend is a stateless Native PHP REST API engine that integrates decoupled business controllers with custom JWT authentication middleware. Communication is secured and routed via a containerized Nginx reverse proxy.
- 01
Vue 3 Client SPA (Vite + TypeScript)
Dynamic analytics dashboards utilizing Pinia for auth and grade state caches. Computes and renders interactive charts (Peer Matrices, Performance Trackers) on the client, minimizing database overhead.
- 02
Native PHP Service Engine
An Object-Oriented REST API utilizing unified controller routing (public/index.php). Business components (Marks, Enrollments, Remarks) are split into standalone controllers.
- 03
JWT Authentication Interceptor
Decoupled middleware (jwtMiddleware.php) validating incoming Cryptographically Signed JSON Web Tokens sent as HTTP Bearer Credentials, mapping identity metadata to active threads.
- 04
Relational Storage (MySQL)
Structured relational schemas indexing course assessment matrices, student enrollments, remark request auditing logs, and system triggers.
- 05
Containerized Orchestration (Docker Compose)
Binds Vue frontend, PHP runtime, Nginx proxy, and MySQL databases inside a standardized microservice context with self-signed TLS certificates.
Dev Setup
Prerequisites
- Docker & Docker Compose
- Git
- Web Browser
# Initializes relational access parameters and token signing vector
# Spins up frontend, OOP PHP service, Nginx reverse proxy, and seeds the MySQL database
# Monitors the background API service health and setup status
# Review instructions to load the apidocumentation.yaml Swagger contract locally
Challenges
- 01
Secure Data Layer Isolations inside a Multi-Role System
Because different users (Students, Lecturers, Advisors, and Admins) use the same database, it is critical to prevent privilege escalation (e.g. students accessing exam keys or modifying others' grades). Mitigation: Implemented a strict row-level authorization filter strategy inside individual controllers. The system ignores client-supplied student IDs and instead extracts the verified, immutable user ID directly from the JWT payload for all data access.
- 02
Real-time Multi-Dimensional Analytical Calculations without Query Degradation
Dynamic dashboards (PeerComparisonChart.vue, CompareAllStudents.vue) require heavy relational calculations to display comparative averages. Executing these continuously on hot tables slows down DB engines. Mitigation: Offloaded mathematical data aggregations to the client browser by fetching transactional indexing-supported foreign join arrays and caching them in Pinia stores, enabling smooth chart renders without database lockups.
What I Learned
- 01
Offloading heavy statistical aggregations to Vue/Pinia client stores keeps our relational databases fast and responsive even under peak academic assessment windows.
- 02
Constructing stateless custom PHP JWT verification middleware provides a lightweight, highly customizable alternative to bloated corporate API frameworks.
- 03
Docker Compose simplifies the staging of multi-tenant microservices, ensuring identical environments between local developer machines and cloud hosts.
- 04
Self-documenting API contracts with Swagger dramatically reduces communication friction between frontend developers and backend engineers.