TaxiMint is a WordPress plugin for taxi and airport-transfer businesses. A customer picks a service, enters a trip, chooses a vehicle and extras, and sees the fare before confirming. The operator manages the fleet, pricing, bookings, cancellations and payments from the WordPress dashboard.
I built it as a product engineer at Themefic, from the first commit in May 2026 through the 1.0 release in July and the rename to TaxiMint in October. I wrote nearly all of the core and every add-on. The same trip can be priced by distance, by the hour, by a fixed route, or by a mix, then adjusted for night pickups, waiting time, return discounts and tax. Most of the work was making sure the price a customer sees is the price they’re charged.
Six ways to price one trip
Operators don’t agree on how a ride should be priced, so each vehicle chooses a model:
| Model | How the fare is built |
|---|---|
| Fixed Rate | A base fare, subject to the minimum |
| Distance | Base fare plus the measured distance |
| Hourly | Base fare plus the billable hours chosen |
| Hourly + Distance | Base fare plus both time and distance |
| Custom Route | An exact fare for a directed pair of locations |
| Combined | The exact route when one matches, otherwise hourly or hourly plus distance |
Each model is its own piece of code, and which one applies to a trip follows a written rule. On top come the minimum fare, extras, waiting time, the night surcharge, discounts and tax, with the minimum enforced before extras so add-ons can’t hide it. A return trip stays one quote and one booking.
Every amount is stored as a whole number of the currency’s smallest unit, such as cents for dollars, so prices never pick up rounding errors. Operators type normal amounts in the admin, and the conversion happens in one place. Adding Ethiopian birr was one more currency entry.
Only listing vehicles that can take the trip
The list only includes vehicles that pass every check: published and bookable, enough seats including child and infant seats, a pricing profile that produces a real fare, booking rules and blockout dates, no clash with existing pickups or returns, and remaining capacity. When the customer picks one, availability is checked again before the fare is final. A vehicle whose fare comes out at zero is rejected as misconfigured rather than offered for free.
The public quote and route preview are rate-limited per visitor and across the whole site, with a clear “try again shortly” when the limit is hit, before the map and distance service is called.
Where I got the surcharge wrong
The night surcharge is a fixed amount for pickups inside a configured time window. My first version applied it per pickup leg, so a return trip with both legs at night charged it twice. It’s now charged once per booking, from the first pickup time, and the stored fare breakdown shows one line for it.
Payments without card data
TaxiMint never sees a card. Pay Full and Pay Deposit hand the amount due now to WooCommerce, and Pay on Arrival confirms the booking with nothing charged online. I excluded WooCommerce’s cash-on-delivery option for TaxiMint orders, because Pay on Arrival already covers it with booking states the operator can act on. When the operator marks a pay-on-arrival or deposit booking completed, the outstanding balance is settled. A partial WooCommerce refund updates the payment records, and a full refund cancels the booking, but only after the refund itself has gone through.
A smaller core
Midway through, driver dispatch was tangled into the core booking, admin screens and database. I pulled it out, along with vendor management, behind hooks that add-ons plug into, and shipped both as add-ons, keeping historical booking references intact. Airport networks became a third add-on, and a white-label layer rebrands the plugin for a client’s airport-transfer service.
Other cuts went the same way before 1.0. A development-only FAQ feature came out of the shipped plugin, the separate “route” concept folded into locations, and dormant Pro locks and license screens were removed so the release only shows what it actually does.
Proving it
The core has 83 PHP and 12 JavaScript test files, and scripts that fill a demo site with a realistic catalogue let the whole flow be tested end to end, which is how the screenshots above were made. Before 1.0 I worked through WordPress.org’s review findings. What isn’t proven yet is how it behaves for a large fleet under real booking volume.