Short answer
RaftLabs helped UrShipper recover a multi-carrier shipping platform on its fifth delivery attempt. The initial build phase took about 14 weeks, followed by ongoing releases. Project records show 214 migrated customers using the portal by June 2, 2025, 1,005 shipments between May 5 and June 2, 2025, and 1,073 shipments in March 2026.
Engagement
The engagement
- Client
- UrShipper, founded by Gil Nugraha
- Sector
- Shipping and logistics
- Market
- Indonesia
- Timeline
- Fifth delivery attempt; about 14 weeks for the initial build from July 2024, with releases continuing into 2026
- Carriers
- FedEx, DHL, UPS, and Aramex, with Shippo in the integration layer
- What shipped
- Customer, staff, and admin portals with Shopify order fulfillment and carrier rate, label, document, and tracking workflows
The situation
UrShipper was not starting from a blank brief. Founder Gil Nugraha had already made four attempts to turn the product into dependable multi-carrier shipping software. The pattern will be familiar to anyone who has inherited a failing build: the app technically existed, but every new feature broke something else, and the operations team bridged the gaps by hand — carrier rates, shipment documents, tracking, Shopify orders.
RaftLabs became the fifth delivery attempt in July 2024. The first useful question was not "what is wrong with the code?" It was the one buyers wish vendors had asked them earlier. What do you do when the system cannot handle something? Which tasks are still done by hand? The initial build took about 14 weeks, but the engagement did not end there: Shopify acceptance, carrier-specific improvements, and production releases stretched into 2026.
The clearest results are dated rather than rounded up. Project reporting recorded 214 migrated customers using the portal by June 2, 2025, 1,005 shipments between May 5 and June 2, 2025, and 1,073 shipments in March 2026.

Delivered scope
What RaftLabs delivered
The product was rebuilt around the workflows that determine whether a shipping platform can operate day to day.
- Workstream 01
Carrier rate-to-shipment workflows
Rate comparison, shipment creation, labels, commercial documents, and tracking across FedEx, DHL, UPS, and Aramex, with Shippo in the integration layer.
- Workstream 02
Shopify order fulfillment
Connected-store and order-import flows, live shipping rates at checkout, fulfillment updates, and tracking returned to Shopify.
- Workstream 03
Customer, staff, and admin portals
Role-specific experiences over shared shipment and account data, rather than separate tools that forced staff to reconcile the same work manually.
- Workstream 04
Commercial and operational controls
Shipment search, account verification, documents, billing thresholds, carrier markups, account tiers, reporting, and support controls.
starting point
The recovery brief
The goal was not to make the old interface look newer. UrShipper needed a platform that could carry a shipment from merchant order to carrier document and tracking update without making the operations team bridge the gaps by hand.
- Four earlier delivery attempts had not produced a dependable operating product
- The existing SaaS platform limited customer notifications and future scale
- Customer and admin experiences created avoidable support and operational work
- Carrier behavior was more varied than a single generic integration could represent
- Shopify orders, shipment creation, documents, and fulfillment updates needed one reliable flow
- A rebuild had to account for existing customers, not only new registrations
- Customers, staff, and administrators worked from role-specific views of one product
- Merchants could compare available services and continue into shipment creation
- Shopify store connections, order imports, live rates, and fulfillment updates were QA-verified
- Carrier-specific rules were handled where a common abstraction was not enough
- UrShipper could manage shipment operations, account rules, documents, and reporting in the platform
- The engagement continued through production releases rather than ending at the initial build milestone
The decisions that made the recovery credible
Diagnose the operating failure, not only the codebase
The visible problem was an underperforming application. The business problem was broader: customers and administrators had poor experiences, carrier rules were not consistently represented, and everyday shipment work created too much operational load. That distinction changed the recovery plan. The team organized delivery around the complete order-to-shipment journey and the people responsible for it, rather than treating each screen as an isolated feature.
For a similar rescue, the first useful artifact is a failure map: where information enters, who touches it, which external system decides the next state, how the failure is detected, and what the operations team does when automation stops.
Treat carrier integrations as separate operating contracts
The hardest part of a shipping platform is not scaling the system. It is surviving the APIs it depends on. Each carrier API behaves like it was built in isolation, because it mostly was. The same shipment can return wildly different prices from different couriers, and an API can return a success response for a shipment that was never actually created.
That means you cannot just show the cheapest price. You need logic to trust the price. UrShipper's testing exposed rules that were not fully known at estimation time, and project records show carrier-specific work around package measurements, chargeable weight, insurance, tracking updates, and commercial invoices.
Aramex is a useful example. The delivered flow needed backend commercial-invoice generation and upload during shipment creation. When aggregated tracking updates were insufficient, the team added direct Aramex tracking work and polling. These are not edge-case embellishments; they determine whether staff receive the document and status needed to operate a real shipment.
Verify commerce flows as business workflows
The Shopify integration was not accepted because an API returned a successful response. The completed QA record covered connecting stores, importing orders, displaying live shipping rates at checkout, and updating fulfillment status. That is the relevant acceptance boundary: the merchant can complete the job, and both systems agree on what happened.
Budget explicit discovery for external-system unknowns
One lesson from the project was that the initial estimate should have reserved more time for carrier research and experimentation. Some rules emerged only while testing real carrier behavior. Before estimating a logistics software project, count the systems it needs to connect with, not just the features you want to see on the screen.
That is a more honest plan than hiding uncertainty inside a fixed estimate. It also gives the client a clearer view of which risks belong to the product team and which depend on carrier accounts, contracts, or API behavior.
the build
How the delivered product handled the hard parts
The system was shaped around four connected boundaries: carrier behavior, Shopify fulfillment, role-specific operations, and commercial controls. Each boundary had its own acceptance criteria, but all four worked over the same shipment lifecycle.
Rate comparison continued into a bookable shipment
Merchants enter shipment details, review available services, and carry the selected option into booking, labels, documents, and tracking. The important design choice was continuity: the rate screen was not a standalone calculator. It began a shipment record that staff could later inspect and support.
The platform also had to preserve carrier-specific requirements. A normalized comparison helps the merchant choose, but it cannot erase the rules needed to create the selected shipment successfully.

Reconstructed interface based on the delivered rate-comparison workflow. Routes, services, prices, and customer data are illustrative. Shopify orders joined the same fulfillment flow
Connected stores could bring orders into UrShipper instead of asking staff to re-enter them. Live rates could appear during checkout, and fulfillment status and tracking could be written back after shipment creation. The December 2024 QA record confirms these connected-store, rate, order-import, and fulfillment flows were tested and accepted.

Reconstructed interface based on the delivered Shopify workflow. Store, order, customer, and shipment data are illustrative. Three roles shared one operational record
Customers created and tracked shipments. Staff handled shipment exceptions, documents, verification, and support. Administrators controlled accounts, commercial rules, and reporting. Separating permissions while retaining one underlying shipment record reduced the need to reconcile customer activity against a separate back-office tool.

Reconstructed interface based on the delivered role-specific portals. Dashboard values and account data are illustrative. Commercial controls sat beside shipment operations
The product documentation records account tiers, carrier markups, billing thresholds, consolidated invoicing, and customer-account controls. Keeping these rules near shipment data made it easier for UrShipper to trace how a carrier transaction became a merchant-facing price and an operations task.

Reconstructed interface based on the delivered account and pricing controls. Tier names, thresholds, prices, and customer data are illustrative.
Proof
What the project record shows, and what this page can't claim
Figures from project reporting. Usage and revenue outcomes after the migration were not on record for this review.
| Result | What changed | Period or context | Evidence and limitation |
|---|---|---|---|
| Volume | 1,073 shipments recorded in March 2026 project reporting | The project began with an unreliable shipping product and a history of unsuccessful delivery attempts. | Project reporting |
| Migration | 214 migrated customers recorded as using the portal on June 2, 2025 | The recovery had to serve an existing customer base, not only launch a new product for future users. | Project record |
| Growth | 41 new registrations recorded from May 5 to June 2, 2025 | UrShipper needed a product that could support both continued operations and new customer acquisition. | Project record |
The lesson
Make integration discovery a visible workstream from the start
Carrier rules surfaced only when realistic shipments were tested against real carrier accounts. The honest version of the estimate would have separated known implementation work from an explicit integration-discovery allowance, then retired each unknown with a test, a documented decision, or a client-owned dependency. That gives the client a clearer risk picture and stops unknown carrier behavior from being disguised as routine implementation. On the next carrier platform, that workstream gets its own line in the plan from day one.
What clients say
What UrShipper's founder says
Three-year average engagement. Founders and operators describing the work in their own words. No marketing varnish.
How it runs
- Hasura
- Hasura supported the shared data layer behind customer, staff, and admin workflows. This case study does not publish UrShipper's private schema or permission rules.
- React and Next.js
- React and Next.js powered the role-specific web experiences used by merchants and the operations team.
- AWS
- Retained product documentation records AWS services supporting identity, compute, background processing, monitoring, and deployment. Exact production configuration remains private.
Common questions
RaftLabs delivered a responsive multi-carrier shipping product with customer, staff, and admin portals; Shopify store and fulfillment workflows; carrier rate, shipment, label, document, and tracking flows; and commercial controls for accounts, pricing, invoicing, and reporting. The carrier scope included FedEx, DHL, UPS, and Aramex, with Shippo used in the integration layer.
The initial build phase took about 14 weeks after the engagement began in July 2024. That is not presented as the completion date for every feature. Shopify acceptance was recorded in December 2024, carrier-specific enhancements continued in 2025, and production releases continued into 2026.
The first step is not calling another developer, and it is not budgeting for a complete rewrite. It is understanding exactly what you have. UrShipper's four attempts had produced a product that technically existed but broke under real operations, so the diagnosis started with the operating failure: where information enters, who touches it, and what the team does when automation stops. That diagnosis is what made the rebuild a recovery rather than a fifth attempt at the same mistake.
Each carrier API behaves like it was built in isolation, because it mostly was. The same shipment can return wildly different prices across couriers, and an API can return a success response for a shipment that was never created. So you cannot just show the cheapest price; you need logic to trust the price. UrShipper's testing exposed rules that were not fully known at estimation time, around package measurements, chargeable weight, insurance, tracking updates, and commercial invoices. Before estimating a logistics software project, count the systems it needs to connect with, not just the features you want to see on the screen.
It should prove the complete merchant workflow: store connection, order import, rate display, shipment creation, fulfillment update, tracking write-back, and understandable failure handling. UrShipper's completed QA record covered connecting stores, live rates at checkout, order imports, and fulfillment-status updates rather than treating API connectivity alone as acceptance.
Yes, but the migration claim should be specific. UrShipper's project reporting recorded 214 migrated customers using the portal by June 2, 2025. This case study does not claim universal zero downtime or disclose a private cutover runbook. A comparable migration still needs account mapping, data reconciliation, connected-account authorization checks, rollback conditions, and named support ownership.
Read our multi-carrier shipping software service page, API development approach, or SaaS development process. This case study is the delivery evidence; those pages explain how we scope a new engagement.
Related work
More operational platforms built around complex integrations

One workspace for orders from multiple delivery platforms
Gula consolidated GrabFood, GoFood, and ShopeeFood orders into one operating view for Indonesian restaurants.

Multi-location operations without replacing the existing POS
A fuel-retail platform unified inventory, invoices, vendors, and 20,000+ daily transactions across 40+ locations.

Booking and keyless access connected into one guest journey
A branded booking engine connected RMS Cloud, Bluetooth locks, payments, and self check-in for a serviced-apartment operator.