Vibe Coding a $20k /year Enterprise Logistics Platform

most startups are founded in big cities with expensive rents. TRMNL started in a basement in the middle of nowhere and later moved to my barn.

with unlimited space it made sense to fulfill in-house and create an assembly line and open a 2nd warehouse. what did not make sense was writing a bunch of courier API integrations.

so last April we signed an annual contract to use ShipHero's fulfillment software at our warehouses in Georgia and Germany. it worked OK but wasn't great.

  • support tickets often ignored
  • mobile layouts are non-existent
  • web portal is split across 2x domains with poor SSO between them
  • it's generally ugly (we value aesthetics)
  • on March 31, 2026 it stopped working at our Berlin warehouse

the last point was our breaking point. for weeks we tried being helpful to our account manager and ShipHero's support team. first they gaslighted us, saying it was normal for postage that usually costs $12 to now cost $140. then a few of my emails landed in their spam. finally they said they're "looking into it." insert the Jennifer Lawrence meme.

when they stopped replying to our messages we decided to replace ShipHero with Claude. and holy crap, it worked.

AI responsibility disclaimer thing

everything you'll see below could have been done by our team, by hand. but what's the point? nobody was put on this earth to read FedEx documentation.

if it ain't broke...

ShipHero provided us 2 essential functions:

  1. adding holds + notes to orders
  2. shipping packages

here's the ShipHero order feed.

ShipHero Orders - we canceled so it's empty

and here's the ShipHero shipping feed. when you click an order it helps you pack + buy postage.

ShipHero Shipping - click an order to pack

each of these interfaces is fine. support engineers use the first one to tweak orders, and the warehouse team leverages those notes while packing.

now let's rebuild it all with $100 in tokens.

high fidelity mockups

we took screenshots of each portal and fed them to Claude Design the day it launched. here's the Order edit page, with fake data of course. sorry Pat Sterling.

Order management

what's particularly impressive is how Claude figured out the "click item on left, item moves to the right" shipping portal UX. we did not offer before/after states.

ShipHero + Claude Design

this may not win awards but it's perfect for our needs.

part of that need was being inertia-friendly. more than a dozen team members developed UI/UX muscle memory from shipping things the Old Way. for a successful same-day switchover, you don't want anything to feel new.

scope creep

if a bunch of people depend on a tool and you replace it overnight, get ready for a barrage of feature requests. to mitigate only a couple of us had permission to file tickets or touch the code.

our ShipHero contract was set to renew on May 1, so D-Day was April 30. after some margaritas and gas station snacks we swerved into the critical path: deploying live API integrations with UPS and FedEx. DHL and USPS came a couple weeks later. until this point we worked in sandbox environments, but now we required live rates and postage labels to resume fulfillment on May 1st without downtime.

some courier JSON payloads are upwards of 1,000 LOC thanks to our "hazardous materials" status and the dozens of countries we ship to. this step was the most supercharged by LLMs. if we had to write these integrations by hand it might have made more sense to pay ShipHero ShipZero for another year of shoddy service.

GH Issues → Production

filing async tickets for Liz made our first week as calm as possible. we even had time for Whataburger and a walk around Callaway Gardens.

final product

shipping physical products requires 4x6 postage labels. we built a network printer utility in Swift that spits out packing slips and shipping labels from any computer to any thermal printer at either of our warehouses in 1 click.

Setting up shipping stations

next you'll want to filter orders for shipment based on priority, what's in stock, and whatever other logistics challenge you may be contending with that day.

Filtering orders for shipment

once an order is selected, WebSockets lock it to that warehouse team member to prevent another person from creating a double shipment.

if the same person places multiple orders they're bubbled up in a Merge Orders interface where we can save on postage fees and reduce customer confusion.

Merging orders from the same customer

when you're ready to ship, clicking SKUs on the left side loads up a package on the right side. for bulk orders we can instantiate multiple boxes and print unique labels + packing slips for each one.

Packing + buying postage

other wild features

logistics is not as simple as "get money, ship device."

pending the customer's location, line items, or special requests, we may need to adjust details on the fly regarding including where the order is shipped from, which courier/method is used, Incoterms, and many other details.

Automation Rules

for this we built Automation Rules. it leverages the same infrastructure as our Serverless function, allowing us to finesse orders automatically following webhooks from our storefront.

here's one such rule which sets US-origin shipments to either UPS Ground or UPS SurePost pending the SKU and customer location.

Automation Rule - UPS Method

we can write these rules in Python, Ruby, or Node. Clicking "actions" on the right side injects the relevant return values for the parser. it's flexible and easy to simulate outcomes with a Test Rule and Execution Log below the code editor.

even more features not depicted:

  • SKU and Box management with HS codes, Customs Invoice setters, and weight/dimensions
  • Carrier and Storefront CRUD with wholesale partner CSV import
  • User management with roles/permissions
  • Payroll automation
  • Firmware flashing and PCB provisioning, detailed further here

by the numbers

we (Liz) spent 80-100 hours building this, then another week on-site to deploy and live debug with the USA warehouse team. our German warehouse was up and running the following Monday.

using ShipHero we sent 30,000+ packages for about $0.76 each. accounting for ongoing maintenance to this platform, that cost should decrease by 2-3x. it's also much, much better than ShipHero. pages load faster, labels print faster, filtering is more powerful, there are no contracts, and we own it.

what this means

from a customer perspective, TRMNL switching logistics platforms is a distinction without a difference. from ShipHero's perspective this should be a wakeup call.

enterprise software providers who don't take their responsibility seriously and rely on 10 page legal contracts to prevent churn deserve every bit of pain that a smart person with a subscription to an autocomplete CLI can incur.

if you have a need for hackable 3PL software, let us know and we might open source ours. it's kind of what we do.

Ryan Kulp

Founder