🛠️ Building in Public

How I Built Ezy Courier: Package Tracking for Caribbean Shippers

📅 April 2026 ⏱️ 8 min read ✍️ Leroy Alexander

If you've lived in Jamaica, you know about courier services. They're how packages get from US stores to Jamaican homes. Amazon doesn't deliver to Jamaica directly, but couriers do — providing US addresses where you ship purchases, then forwarding them to Jamaica.

It's a billion-dollar industry in the Caribbean. But most courier companies run on spreadsheets, phone calls, and paper receipts.

Ezy Courier is my attempt to modernize that — a WordPress plugin for pre-alerts, package tracking, customer notifications, and operations management. Here's how I built it.

Understanding the Business

Before building, I needed to understand how courier operations actually work:

The Courier Flow

1

Pre-Alert: Customer submits tracking number and package details before it ships

2

US Warehouse: Package arrives at courier's US address

3

Consolidation: Packages grouped for shipment to Jamaica

4

Shipping: Air or sea freight to Jamaica

5

Customs: Clearance and duty calculation

6

Ready: Package available for pickup or delivery

7

Collected: Customer picks up or receives delivery

At each stage, customers want updates. And couriers need to track hundreds or thousands of packages simultaneously.

The Core Problem

Manual Everything

Most couriers handle pre-alerts via email or WhatsApp. Staff manually enters data into spreadsheets. Status updates go out via individual messages. "Where's my package?" calls consume hours daily.

What they needed:

  • Self-service pre-alert submission by customers
  • Automatic status tracking without manual entry
  • Automated customer notifications at each stage
  • Dashboard showing all packages and their statuses
  • Customer portal for tracking without calling

Key Features Built

📝 Pre-Alert Form

Customers submit tracking numbers, store names, descriptions, and values before packages ship. 100+ stores in dropdown for quick selection.

📦 Package Tracking

Each package gets unique ID. Status tracked from pre-alert through pickup. Full history maintained.

📧 Email Notifications

Automated emails at status changes: received at warehouse, shipped, cleared customs, ready for pickup.

🔔 Admin Alerts

New registration notifications. Daily summary emails. Alert on high-value packages.

👤 Customer Portal

Customers log in to see all their packages, statuses, and history. No phone calls needed.

📊 Operations Dashboard

All packages at a glance. Filter by status, date, customer. Bulk status updates.

The Pre-Alert Challenge

The pre-alert form was surprisingly complex. Customers ship from many stores, and the courier needs to know:

  • Where it's shipping from (store name)
  • What it is (description)
  • What it's worth (for customs)
  • Tracking number (to match when it arrives)

100+ Store Options

Built a searchable dropdown with over 100 common stores — Amazon, eBay, Walmart, Shein, Fashion Nova, Best Buy, etc. Customers select from list rather than typing, ensuring consistent data.

For stores not in the list, there's an "Other" option with a text field. But the curated list handles 95% of cases.

Email Notifications

The notification system was critical. Customers want to know when their package status changes — but the emails need to look professional and render properly on all devices.

Table-Based Email Templates

Modern CSS doesn't work in email clients. Built all notification templates using old-school HTML tables for maximum compatibility. Mobile-responsive through table width attributes.

Notification types built:

  • Pre-alert confirmation: "We received your pre-alert for [tracking]"
  • Received at warehouse: "Your package arrived at our Miami location"
  • Shipped: "Your package is on the way to Jamaica"
  • Cleared customs: "Customs cleared. Duty: $X. Ready in X days"
  • Ready for pickup: "Your package is ready at [location]"
  • Delivered: "Your package was delivered"

Admin Notification System

The courier operators needed their own notifications:

  • New customer registration: Alert when someone creates an account
  • High-value package: Flag packages over $500 USD for special handling
  • Daily summary: Packages received, shipped, collected today

The new registration email was specifically requested — operators want to welcome new customers and verify accounts.

Technical Decisions

WordPress Custom Post Types

Packages are a custom post type with custom fields for:

  • Tracking number (original carrier)
  • Internal tracking ID (courier's system)
  • Customer (linked to WP user)
  • Store origin
  • Description and value
  • Status and status history
  • Customs duty calculated

Status State Machine

Package status follows a defined flow. The system enforces valid transitions:

pre-alert → received → shipped → customs → ready → collected

Can't mark something "collected" if it hasn't been "ready" first. Each transition triggers the appropriate notification.

Bulk Operations

When a shipment arrives with 200 packages, you can't update them one by one. Built bulk status update:

  1. Select packages (checkbox or scan barcodes)
  2. Choose new status
  3. Apply to all
  4. Notifications sent automatically

Current State: v1.7.3

The plugin is deployed with a courier operation, handling:

  • Thousands of pre-alerts monthly
  • Automated notifications reducing "where's my package" calls
  • Customer self-service tracking portal
  • Full operations dashboard

Before, I had someone answering phone calls all day — "where's my package?" Now customers check online. My staff focuses on actually moving packages instead of talking about them.

What's Different About Courier Software

Compared to my other products:

  • Higher volume: Couriers handle thousands of packages. Performance and bulk operations matter more.
  • More integrations potential: Tracking API integration with carriers (FedEx, UPS, USPS) would be valuable.
  • Customs complexity: Duty calculations vary by category, value, country. Complex rules.
  • Multi-location: Many couriers have multiple pickup points. System needs to handle that.

Lessons Learned

1. Email Delivery Is Hard

Getting emails to actually arrive in inboxes (not spam) requires proper SPF, DKIM, and careful sender reputation. Built guidance into the setup process.

2. Store Lists Need Updates

New online stores launch constantly. Built an admin interface to add/remove stores from the pre-alert dropdown without code changes.

3. Status History Matters

When a customer disputes, you need to show exactly when status changed and who changed it. Full audit trail essential.

4. Mobile-First Operations

Warehouse staff scan packages with phones. Admin interface needs to work on mobile screens.

Roadmap

Future features planned:

  • Carrier API integration: Auto-pull tracking updates from FedEx/UPS/USPS
  • SMS notifications: WhatsApp or SMS for customers who prefer
  • Duty calculator: Estimate customs duty before package arrives
  • Barcode scanning: Mobile app for warehouse package scanning
  • Multi-branch: Support for courier chains with multiple locations

For Other Developers

Building logistics software? Key considerations:

  1. Think in states. Packages (or orders, or shipments) move through states. Define the state machine clearly.
  2. Notifications are core. Customers expect updates. Build notification infrastructure early.
  3. Bulk operations required. Single-item operations don't scale. Build for batches.
  4. Mobile-first for operations. Warehouse staff aren't at desks. Everything needs to work on phones.
  5. Audit everything. When disputes happen (and they will), you need complete history.

Run a Courier Business?

Ezy Courier can streamline your operations. Let's talk about your requirements.

Get a Demo

Related Articles

👨‍💻

About Leroy Alexander

Founder of Ezy Web Pro. 14+ years building software from Jamaica for Caribbean businesses and international clients.