Back to portfolio

Case study

ERP System

One system for sales, accounting, treasury, inventory, purchasing and HR, in Arabic and English.

Freelance · United Trading & Supplies (UC Supply & Trade)

  • Laravel 13
  • PHP 8.3
  • MySQL 8
  • Tailwind CSS (TailAdmin)
  • Google 2FA
  • spatie/laravel-permission
  • mPDF
ERP system sign-in page
ERP system sign-in page

The problem

A trading and supplies business needs its sales, money, stock, purchasing and staff to agree with each other. When quotations, invoices, payments, warehouse movements and payroll live in separate places, the accounts drift from reality and every report takes manual reconciliation.

The solution

A single ERP where every business action posts to the books. A customer moves from lead to quotation, invoice, payment and collection; a purchase request becomes a purchase order, a goods receipt and a supplier payment; and each step updates double-entry accounting, the treasury and stock in the same transaction. The whole system runs in Arabic (RTL) and English.

Key features

Sales & CRM

Customers and branches, leads, quotations and invoices.

Payments & collections

Payments with allocations and reminders, and collections.

Double-entry accounting

A tree chart of accounts with journal and ledger entries.

Treasury

Cashboxes and bank statements.

Inventory

Warehouses, stock movements, stocktakes and price lists.

Purchasing

Purchase requests, purchase orders, goods receipts and supplier payments.

HR & payroll

Employees, attendance records, payroll, advances and bonuses.

Operations

Expenses, contracts, tasks, approvals, business rules and recurring transactions.

E-invoicing & import

E-invoicing submissions and data import.

Security & collaboration

Roles and permissions, two-factor authentication, audit log and internal chat.

Technical highlights

  • Thin controllers: validation lives in form requests and authorization in policies.
  • Service classes wrap multi-table writes in database transactions, so a document and its accounting, cash and stock effects succeed or fail together.
  • LedgerService handles double-entry posting; CashboxService and StockService own treasury and inventory movements.
  • PHP enums for statuses, and events and listeners to keep modules decoupled.
  • Queued jobs for exports and heavy reports; PDFs generated with mPDF.
  • spatie/laravel-permission for roles, Google 2FA for sign-in, and full Arabic (RTL) and English interfaces on Tailwind CSS (TailAdmin).

My role

A freelance project I delivered for United Trading & Supplies. I designed the architecture and data model and built the modules, from the accounting core and service layer to the bilingual interface.

Need a system like this?

Tell me about your project and I will get back to you soon.

Other case studies