All projects
Web app React Router Node.js Supabase 2025–2026, in development

CurShip

Shipping for South African Shopify stores: price it, book it, print the label and follow the parcel, without leaving Shopify.

Type

Own product

Role

Design & development

Timeline

2025 – 2026

Demo

curship.vercel.app

CurShip home dashboard running on sample data
The CurShip home dashboard in demo mode, on sample data.

Shopify integration

Real orders, tested in a dev store

Courier booking

Tested in The Courier Guy's sandbox

Payments

Wallet in Paystack test mode

Launch

Not yet live for merchants

The brief

South African Shopify stores ship through local couriers, but the work usually happens outside Shopify: getting a quote on the courier's site, copying the address across, booking, then coming back to mark the order as fulfilled. It's slow, and it's easy to make mistakes.

I set out to build a shipping app that keeps the whole job inside Shopify, from the price of a delivery to the tracking link the customer receives.

What it does

  • A CurShip block on the order page with shipping options and booking status.
  • "Book with CurShip" for orders ticked on the Orders list, to book several orders at once.
  • Labels in Shopify's Print menu, next to Shopify's own documents.
  • Cancel with refund. Cancelling in Shopify cancels the booking and refunds it.
  • A portal on CurShip's own site that does the same work, including parcels that have no Shopify order.

Design principles

Stay inside Shopify

Put CurShip where merchants already work: the order page, the Orders list and the Print menu.

One order or fifty

Booking one parcel and booking a batch use the same flow, so there's nothing new to learn.

Try it without accounts

A demo mode runs the full portal on sample data, so anyone can see it without a Shopify store or API keys.

Process

I built CurShip on Shopify's official React Router app template, with Node.js on the server and Supabase (PostgreSQL) for data.

  1. 1

    Research

    Studied what Shopify and the couriers actually allow, and compared existing options such as Evership, Bob Go, The Courier Guy, Pargo and AfterShip. I kept the findings, with sources, in the project docs.

  2. 2

    The Shopify app

    Set up the app on Shopify's React Router template, with the order-page block, bulk booking from the Orders list and labels in the Print menu.

  3. 3

    Courier integration

    Connected The Courier Guy's API for prices, booking and labels, tested against the courier's sandbox.

  4. 4

    Fulfilment and refunds

    Linked bookings to Shopify fulfilment, and made a cancel in Shopify cancel the booking and refund it. Tested with real orders in a development store.

  5. 5

    Demo and documentation

    Built a demo mode on sample data, hosted at curship.vercel.app, and wrote docs for the architecture, courier integration, hosting and launch list.

Key decisions

Building into Shopify's own pages

A separate dashboard would have been quicker to build, but merchants would have had to keep switching tabs. Putting CurShip on the order page, the Orders list and the Print menu means the shipping step sits right where the order already is.

A prepaid wallet

Merchants pay for shipping from a prepaid wallet. Bookings are paid from the balance, and cancellations go back into it. The wallet is built for Paystack and currently runs on test keys only.

Being clear about what's finished

The demo shows where the product is going, including returns, claims, automation, analytics and a branded tracking page. I keep a clear line between what works today and what is still planned, in the app and in its documentation.

Where it stands

  • Shopify integration: real Shopify orders, fulfilment, labels, and cancel with refund, tested in a development store.
  • Courier booking: tested in The Courier Guy's sandbox.
  • Payments: wallet in test mode. No live payments taken.
  • Launch: not yet launched to merchants. Next up are live courier booking, live payments and hosting for the real app.

Reflections

CurShip is the biggest project I've worked on so far. It taught me that most of the work in an app like this is about understanding the platforms it connects to: Shopify, the courier and the payment provider. The code comes after.

It also taught me to write things down. Keeping the research, decisions and launch list in the project's docs makes it much easier to pick the work back up and to explain it to others.


Try the demo on sample data, or read more in Building a shipping app for South African Shopify stores.

More projects

All projects

Need something built
for your store?

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