All articles
Dev , 5 min read

Building a shipping app for South African Shopify stores

Why I started CurShip, how it fits inside Shopify, what I learned working with a courier API, and what's left before it can launch.

Richard Mazhindu

Richard Mazhindu

Web developer, Pretoria

Code on a screen

The problem

Every Shopify store I work on runs into the same question once the products are live: how do the parcels actually get to customers? For South African stores the answer usually means juggling a courier's website, copying addresses by hand, and marking orders as fulfilled one at a time.

I wanted a merchant to see what an order costs to ship, book a courier, print the label and follow the parcel without leaving Shopify. That became CurShip.

How it fits inside Shopify

CurShip is built on Shopify's official React Router app template. Instead of sending merchants to a separate dashboard for everything, most of it sits on Shopify's own pages:

  • A CurShip block on the order page showing shipping options and booking status.
  • "Book with CurShip" for orders ticked on the Orders list, so several orders can be booked at once.
  • CurShip's labels in the Print menu, next to Shopify's own documents.
  • Cancel with refund. Cancelling in Shopify cancels the booking and refunds it.

There's also a portal on CurShip's own site that does the same work, including booking a parcel that has no Shopify order.

The stack

The app uses React Router, Node.js and Supabase (PostgreSQL). For prices and booking it talks to The Courier Guy's API. I tested the full flow against real Shopify orders in a development store: fulfilment, labels, and cancel with refund.

"Booking only runs against the courier's test system for now. The wallet is built for Paystack test keys, and no live payment has been taken."

I keep that line in the project's own README, because it's easy to make a demo look more finished than it is.

What I learned

  • Read the platform's rules first. A lot of my time went into researching what Shopify and the couriers actually allow before writing code. I keep notes on what is and isn't possible, with sources.
  • Build a demo that needs no accounts. CurShip has a mode that runs the whole portal on sample data. Anyone can try it at curship.vercel.app without a Shopify store or API keys.
  • Write the documentation as you go. The project has docs for the architecture, the courier integration, hosting and the launch list. Future me shouldn't have to guess.

What's left

CurShip isn't launched to merchants yet. Before it can be, it needs live courier booking, live payments and hosting for the real app. After launch, the plan is to add returns, claims, automation, analytics and a branded tracking page.

You can read more in the CurShip case study.

Keep reading

All articles

Got a store
to build?

Tell me what you're selling or building. I'm available for freelance projects, contracts and development roles.

LinkedIn GitHub CV (PDF) CV (Word) Pretoria, South Africa