Case study 08 / 09
Client project · 2026
Shams al Murjan
A Laravel ERP and client portal for Shams al Murjan, a used auto-parts trading company: containers, stock, invoicing, money exchange, payroll and investor accounting.
- Role
- Full-stack developer
- Stack
- Laravel
- PHP
- MySQL
- Blade
- Bootstrap
- jQuery DataTables
- Spatie Permission
- DomPDF / mPDF

01
Overview
Shams al Murjan Used Auto Spare Parts TR L.L.C trades used auto parts that arrive in shipping containers. Its internal system runs the business: containers and their contents, stock, invoices and payments, money exchange, payroll and investor accounts.
The system is a Laravel application with an admin panel for staff and a separate portal for client companies. I extended it with the client portal and several business modules.
02
The brief
Client companies need to follow their own containers, invoices and balances without waiting for staff to send updates. Staff need fine-grained permissions across many modules, and financial records need a history that is never lost.
03
Role and scope
- Role
- Full-stack developer
- Scope
- I extended the system with the client portal and access page, user management, investor accounting periods, container items and stock, invoicing fixes and a responsive navigation.
04
Main features
Client portal
An invite-only portal where client companies see their invoices, containers, tracking, stock, expenses and payments, download PDFs and switch between their companies.
Containers and stock
Container records with items, expenses and port tracking, linked through to stock and invoicing.
Invoicing and payments
Invoices built from container items, with payments, loading and return handling, and bulk actions.
Money exchange
Hawala transfers, loan payments, a daily journal and balance-sheet reports.
Payroll and investors
Salaries, leave and payments, plus investor deposits, withdrawals and period closing with snapshots.
Permissions
Role-based access with fine-grained permissions across more than twenty modules.
05
How it’s built
Separate sign-in for clients
Staff and client companies sign in through separate Laravel guards. Clients join by email invitation (valid for 72 hours) and can reset their own passwords.
Server-side tables and exports
AJAX DataTables keep long lists fast, and exports produce PDF and Excel files with Persian and Arabic text set in the Vazirmatn font.
Archive instead of delete
Records use soft deletes and an archive flag, so financial history stays available for review.
Integrations
- Spatie Laravel Permission
- Yajra DataTables
- DomPDF and mPDF
- Email invitations
06
Challenges and decisions
Right-to-left text in exports
Persian and Arabic names in PDF exports needed a remapped font and a right-to-left fix before they printed correctly.
A portal per company
The portal runs on its own authentication guard and shows each client only the companies linked to its account, including clients with several companies.
07
What was delivered
- An invite-only client portal with PDF downloads
- Investor accounting with period closing
- Container item, stock and invoicing improvements
- User and role management, and navigation that works on phones
