←  Selected work
Case study — platform engineering & business workflows

A subscription-based compliance platform for the air-cargo industry.

World AVSEC turns the records behind TSA air-cargo compliance into a multi-role application: companies, facilities, employees, training, documents, subscriptions and partner authorisations in one system. WordPress and WooCommerce provide the foundation; the product logic lives in a custom application layer built around the way the supply chain actually works.

Client
World AVSEC — US aviation-security compliance company
Role
Full-stack platform engineering and long-term product development, delivered white-label
Stack
WordPress, WooCommerce Subscriptions, custom PHP, Vue.js and MySQL
Scope
Multi-role accounts, recurring billing, compliance records, documents and cross-company workflows
Product surface

Records inside one company. Trust between many companies.

The account area has to do two jobs at once: keep each facility’s compliance evidence current, then expose the right evidence when another business needs to verify and authorise a working relationship.

World AVSEC driver compliance screen with fictional STA expiry and training records
Compliance STA and training status at facility level
World AVSEC partner relationship screen with fictional facilities, compliance states and authorisation actions
Network Facility relationships and authorisation evidence

Interface screenshots contain fictional demonstration names, organisations, contact details, addresses and compliance records. No customer or user data is shown.

The problem

The compliance data was scattered. The obligation was not.

Air-cargo companies need current records for drivers, security threat assessments, mandatory training, facilities, vehicles, screening equipment and supporting documents. When those records live in spreadsheets, folders and email threads, answering a compliance question becomes a search exercise.

The data is relational. A user belongs to a company; a company can operate several facilities; each facility has its own employees, evidence, assets and subscription state. A flat membership plugin cannot represent that hierarchy safely or clearly.

The supply chain adds a second problem. An Indirect Air Carrier may need to work with an authorised representative in another market. Finding that facility, requesting a connection and exchanging authorisation evidence are part of the same operational workflow as the underlying compliance records.

Sector
TSA-regulated air-cargo security and logistics
Users
Indirect Air Carriers, authorised representatives, airlines and cargo screening facilities
Model
Company → facilities → users, drivers, records, assets and documents
Business
Recurring subscriptions at company and facility level
What the platform does

Four layers turn records into an operating system.

01

Models the business hierarchy

Role-aware registration creates the user, company and first facility together. From there, each organisation manages its facilities, employees, fleet, airport zones, screening equipment and secure documents in the right context.

02

Makes billing part of application state

WooCommerce Subscriptions is more than checkout. Company and facility access are gated by subscription status, and status-change hooks activate or deactivate the corresponding facilities without duplicating a second billing system.

03

Keeps evidence attached to the people and places it describes

Driver records hold STA numbers, status and expiry dates alongside required training and certificates. Teams can filter expired records, request training in bulk and export the current state when it needs to leave the platform.

04

Connects companies through an explicit workflow

Facilities can be found by location and capability, connection requests can be accepted or rejected, and authorisation letters can be generated as PDFs. Partner access builds on those relationships instead of exposing operational data publicly.

The build

A WordPress codebase organised like a product.

The custom domain plugin separates models, controllers, data stores, enumerations and email classes behind a namespaced autoloader. Business rules have a defined home instead of accumulating in a theme file or a chain of page-builder callbacks.

WooCommerce handles products, orders and recurring payments; the application layer maps those events onto companies and facilities. A custom theme and a partial Vue.js frontend provide the account experience without forcing every screen into a single frontend framework.

Google Places supports structured facility addresses. Secure document handlers keep upload and download permissions inside the platform, while a custom HTML-to-PDF layer turns signed authorisation records into portable evidence.

Core
Custom WordPress plugin and theme, PHP OOP and MySQL
Billing
WooCommerce + WooCommerce Subscriptions
Frontend
Server-rendered account screens with focused Vue.js components
Location
Google Maps Places autocomplete and geocoding
Documents
Secure uploads and downloads, plus generated PDF letters
Accounts
Role-aware registration, activation, 2FA and password-reuse protection
Engineering decisions

Where the architecture carries the business rules.

Data model

Model the supply chain, not a membership list

Companies, facilities and users are separate entities because ownership, billing, permissions and compliance evidence do not all live at the same level.

Commerce

Use subscription events as domain events

Payment state has a direct operational consequence. Mapping WooCommerce status changes onto facilities keeps billing and product access in one source of truth.

Maintainability

Give every rule a durable home

The domain plugin keeps models, persistence, workflows and email behaviour explicit, so the platform can evolve without turning the theme into the application.

Next

Building a portal that standard plugins cannot describe?

WordPress can support complex operational products when the data model, permissions, billing events and workflows are designed as one system. That architecture is the work — the interface is only where it becomes visible.