Selected Work Case Study 02 / 02 · Dapper Motor

Invoice Management Platform

Dapper Motor
Invoice System.

A Laravel platform that retires four years of Word files and Excel sheets. UK-to-Sri Lanka vehicle export documentation, branded PDFs, multi-template email, a full audit trail.

Client Dapper Motor Company Ltd
Industry Vehicle Export · UK → SL
Year 2025
Status Live · dapper.oreno.lk

The Call

They came to us
with a paper trail.

Every export started in Word. Every send-off ended in Gmail. No record, no search, no trail. Finding invoice DMC338 meant scrolling through a shared folder.

01 / Pain

Each invoice was hand-built in Word.

02 / Pain

PDFs were attached and emailed by hand.

03 / Pain

Nobody could tell what was paid, pending, or lost.

The Answer

We built one system
that runs every invoice.
Four fields. Four clicks. PDF out.

Laravel 11 · DomPDF · Live in 2025

By the Numbers

In production.

Live at dapper.oreno.lk, processing real transactions for real vehicles crossing the Indian Ocean. The system that retired four years of manual invoice creation.

Total Invoices
0
Active, paid, and archived — all in one searchable database
Filter Parameters
0
Text · status · date range · price range · creator · email status
Permissions
0
Granular capabilities — invoices.create, invoices.pdf, settings.edit
Data Tables
0
Users · permissions · pivot · invoices · templates · settings

Inside the System

Click through
the real product.

Every screen, in motion. Tap a tab — or let it auto-advance. This is what the DMC team sees when they log in to send an export invoice.

dapper.oreno.lk / login
SEAL
01 / Login

Two doors. One gate.

Email + password, or Google OAuth. Google never auto-creates users — admin must pre-register every account. No public signup. Ever.

02 / Create

Form left. Document right.

Two-column layout. FOB + Freight = CFR Total, calculated live. Amount-in-words generated automatically by GbpToWords. Save as Draft or Unpaid.

03 / PDF

A4. Branded. Sealed.

DomPDF renders the Blade template. Seal embedded as base64. Streamed fresh on every request. Never stored on disk.

04 / Send

PDF auto-attached.

Template pre-filled with placeholders. Edit before sending if needed. Sent timestamp logged on the invoice record forever.

05 / Archive

Fifteen filters, one list.

Text, status, date, price, creator, email status — all combinable. Soft deletes preserve data. Excel export pulls every matching row.

06 / Settings

Six tabs. Zero guesswork.

Company info, email templates, seal upload, SMTP config, staff permissions, appearance. Everything an admin needs — nothing they don't.

Click a tab — or watch it cycle

Architecture

Request in.
Invoice out.

A classic Laravel MVC flow — router, middleware, thin controllers, services, Eloquent, Blade. No SPA, no API layer, no over-engineering. The simplest thing that could possibly work.

Client Browser Laravel Router Middleware auth AdminOnly CheckPermission CONTROLLERS Invoice · Dashboard Settings · Staff · Auth Services InvoiceNumberService GbpToWords · Filter Eloquent Models Invoice · User · Setting Permission · Template MariaDB 6 Tables Blade Views + PDF DomPDF Stream PDF NO NPM · NO BUILD STEP · CDN ONLY · DEPLOYED VIA CPANEL FILE MANAGER

Tech Stack

Zero build tooling.
Zero excuses.

No npm, no Node.js, no compiled assets. Everything is CDN-loaded or server-rendered. Deploy by uploading a zip to cPanel. The entire pipeline is "upload and extract."

BackendLaravel 11 · PHP 8.3Mature MVC with first-class PDF, mail, and auth support. Runs on shared cPanel hosting without Docker.
DatabaseMariaDB 10.11Six normalized tables, foreign keys, soft deletes. No NoSQL, no Redis, no extras.
TemplatingBladeServer-rendered HTML. The PDF template uses inline styles only — DomPDF ignores external CSS.
Frontend CSSTailwind (CDN)CSS custom properties for theming. Dark mode via class toggle. No PostCSS, no build config.
ReactivityAlpine.js (CDN)Dropdowns, modals, date pickers, live CFR calc, collapsible filter panel — about 200 lines total.
PDF Enginebarryvdh/laravel-dompdfConverts Blade templates to A4 PDFs on the fly. Seal embedded as base64. Never stored on disk.
EmailLaravel Mail · SMTPSends invoices with PDF attached. SMTP config stored in DB, editable from Settings. Synchronous — no queues.
AuthSession + Google OAuthDual login. Google OAuth never auto-creates users. Admin must pre-register every account.
Exportmaatwebsite/laravel-excelExport filtered invoice lists to .xlsx. All matching rows, not just the current page.
HostingcPanel · Shared LAMPPHP 8.3, MariaDB, no SSH. Deploy via File Manager zip upload. Live at dapper.oreno.lk.

Data Model

Six tables.
One truth.

Users, permissions, the pivot, invoices, templates, and a singleton settings row. Foreign keys enforce referential integrity. Soft deletes preserve every record. The database is the contract.

users id · PK name · email · password google_id · nullable role · admin | staff is_active timestamps permissions id · PK name · invoices.create label permission_user user_id · FK permission_id · FK invoices id · PK invoice_number · DMC343 status · draft|unpaid|paid|cancelled importer_name · address vehicle_make_model · chassis transmission · engine_capacity year · colour · fuel_type fob_price · ocean_freight · cfr email_sent_at created_by · updated_by · FK timestamps · deleted_at invoice_templates id · PK name · layout header_html · footer_html font_family settings Singleton row company_name smtp_host · smtp_port smtp_username · enc pwd email_subject_template email_body_template seal_image_path

Access Control

Ten capabilities.
Two roles.

Every action is one of ten named permissions. The CheckPermission middleware enforces them on every route. No one sees a screen they don't need; no one touches a button they don't own.

CapabilityAdminStaff
invoices.view
invoices.create
invoices.edit
invoices.delete
invoices.export
invoices.email
invoices.pdf
dashboard.view
settings.view
settings.edit

Engineered by ØRENO

Still sending invoices
from a Word template?

We build purpose-built systems that retire manual processes entirely. No generic SaaS. No subscription. Your system, your data, your domain.