Back to blog
LaravelLMSArchitecturePostgreSQLProduction
TACI: Building a Production-Grade LMS for Institutional Education
Architecture deep-dive into TACI — a full-featured Learning Management System serving 200+ active users at taci.edu.pk with role-based access, attendance tracking, and income management.
4 min read·Talha Bilal

Overview
TACI is a production Learning Management System deployed live at taci.edu.pk, serving 200+ active institutional users including administrators, teachers, and students. This case study walks through the architectural decisions that made it scalable, maintainable, and reliable.

Architecture Overview
The system follows a monolithic MVC architecture with clear separation of domains:
Rendering diagram...
Core Domain Modules
Role-Based Access Control
The system implements a comprehensive RBAC system with three primary roles:
| Role | Permissions | Access Level |
|---|---|---|
| Admin | Full system access | All modules, settings, user management |
| Teacher | Class & grade management | Attendance, exams, student reports |
| Student | Personal view only | Grades, attendance, timetable |
Attendance Module
The attendance tracking system supports daily entry with automated reporting:
Rendering diagram...
Income & Fee Management
Financial tracking is organized by academic sessions with monthly installment support:

Rendering diagram...
Data Model Design
The database schema follows a normalized design with strategic denormalization for performance:
Rendering diagram...
Deployment Stack
The production environment runs on a single VPS with the following stack:
- Web Server: Nginx with PHP-FPM
- Application: Laravel 11 with Blade templating
- Database: PostgreSQL 16
- Cache: Redis for sessions and caching
- Queue: Horizon for background job processing
- Assets: Local file storage with CDN integration

Key Engineering Decisions
Why Laravel Over Next.js for This Project
While I typically reach for Next.js in SaaS projects, TACI demanded:
- Server-rendered Blade templates for instant page loads on institutional networks
- Mature ORM (Eloquent) for complex relational queries across 20+ related tables
- Built-in RBAC gates via Laravel's authorization layer
- Horizon for managing attendance and report generation queues
PostgreSQL Over MySQL
PostgreSQL was chosen for:
- Advanced indexing on JSON fields used in dynamic form responses
- CTE support for recursive queries in hierarchical class structures
- Better concurrent write performance under the attendance submission load
Performance Metrics
After 3 months of production operation:
| Metric | Value |
|---|---|
| Active users | 200+ |
| Daily attendance records | 800+ |
| Average page load | <1.2s |
| Database size | 2.3GB |
| Uptime | 99.7% |
Lessons Learned
- Start with the data model — the attendance and fee modules required three schema migrations before stabilizing
- Cache strategically — daily attendance reports were hitting the DB 40+ times per request before Redis caching
- Test with production data volume — performance characteristics change dramatically at 200+ concurrent users
Interested in building a similar system for your institution? Reach out through the contact form.
