The Challenge
A corporate-training provider ran its business across spreadsheets: client companies and their contacts, the programs sold to them, who attended each course, and what each trainer was owed. Linking a course to its invoice, its sales owner and its trainer fees meant reconciling several files by hand.
The team needed a single internal system with proper roles, where management could see leads, monthly sales and program activity without rebuilding the picture every time. It had no need for a public website; this was purely an operations tool.
Our Solution
We built an internal admin back office on Filament 3 and Laravel 11. The system tracks super-admins, admins, trainers, supervisors, participants and client-company contacts as distinct roles, while only administrators sign in. Access is governed through Spatie Permission.
Each course records its program and topic, whether it is delivered on-site or at another location, its price, an invoiced flag, the lead account manager and who sold it. Session schedules sit under the course, with a fee and a paid status for every trainer assignment. Payments are linked to the relevant entity and carry invoice numbers, so money can be traced back to its source.
File uploads are checked at four layers: Livewire, media-collection rules, form fields and server-side rules, with Spatie Media Library handling storage. Reports and imports run through DomPDF and Laravel Excel.
- Client companies: records with liaison officers
- Programs and topics: the catalogue that courses are sold from
- Courses and sessions: scheduling, pricing, invoiced flag and trainer fees
- Payments: linked to different entities, with invoice numbers
- Participants: bulk import from CSV or Excel
- Reports: course, trainer and financial reports with PDF export
- Dashboard: widgets for leads, monthly sales and a program overview
The Results
- One system replaces spreadsheets: companies, courses, participants and payments now live in a single back office.
- Trainer payments tracked per session: every fee carries a paid status, visible beside the schedule.
- Traceable invoicing: payments link to their entity and invoice number, and courses carry an invoiced flag.
- Faster participant onboarding: rosters load through CSV or Excel import instead of manual entry.
- Management visibility: dashboard widgets and PDF-ready course, trainer and financial reports.