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
Pre-Alert: Customer submits tracking number and package details before it ships
US Warehouse: Package arrives at courier's US address
Consolidation: Packages grouped for shipment to Jamaica
Shipping: Air or sea freight to Jamaica
Customs: Clearance and duty calculation
Ready: Package available for pickup or delivery
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"
Great news! Your package from Amazon is ready for pickup.
Tracking: 1Z999AA10123456784
Description: Electronics
Customs Duty: $850.00 JMD
Pick up at: [Store Address]
Hours: Mon-Fri 9am-5pm, Sat 9am-1pm
Don't forget to bring your ID!
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:
- Select packages (checkbox or scan barcodes)
- Choose new status
- Apply to all
- 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:
- Think in states. Packages (or orders, or shipments) move through states. Define the state machine clearly.
- Notifications are core. Customers expect updates. Build notification infrastructure early.
- Bulk operations required. Single-item operations don't scale. Build for batches.
- Mobile-first for operations. Warehouse staff aren't at desks. Everything needs to work on phones.
- 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