← Back to all posts

Introducing our Logistics Tech

our decision to assemble + fulfill in-house requires ongoing iterations to ensure customers receive what they ordered as quickly as possible.

in this post i'll provide a step by step tour of our in-house solutions to manage everything, highlighting each before/after customer facing benefit along the way. because ultimately, this is for you.

step 1 - placing purchase orders

thanks to Mercury Capital we can finance large purchase orders and avoid those dreaded out of stock periods we experienced at the end of 2024, early 2025.

we track inventory the old fashioned way with a spreadsheet and formulas that help determine re-order dates when something is running low.

step 2 - storage

our warehouse has ~20 storage racks, each dedicated to specific components. using screens as an example, a single shelf fits 11x boxes of 60x quantity, so a full rack holds 3,300 screens. we try to maintain 2-3 racks at all times.

step 3 - fulfillment

for many brands this is where the tour ends -- at whatever software they use to calculate shipping and print labels.

but we assemble everything in-house, and that requires a much more sophisticated solution. here's ours.

introducing TRMNL Work

core team member Liz, who has a background in logistics, dreamed up everything you're about to see below.

hardware
  • Zebra CC6000 price checker (8x quantity)
  • Zebra ZQ620 hip printers (3x quantity)
software
  • Android application
  • Python web interface

the life of a TRMNL assembly worker involves a few steps that may now be completed in any order: flash firmware to a PCB, assemble devices, ship devices. let's walk through each task.

flashing PCBs

let's log into my account, which attributes all subsequent actions to my user ID. in addition to accountability, this also lets us run payroll in 1 click (which we'll cover in a bit).
TRMNL Work login screen
typing in secure passwords on a large touch screen is kind of a drag, so we have Speed ID badges that scan you right inside.
scanning my login keycard
and now we're in.
TRMNL Work welcome page
so let's open Device Flasher. after plugging in a PCB (or 2, or 3) our firmware will begin uploading automatically.
Flashing a PCB takes 15-20 seconds
as PCBs are flashing we can scan their serial number, which provisions the device in our core web app database.
Benefits of using a price checker tablet

assembling devices

now let's assemble a device. i've moved to one of our 4x assembly stations and will log in again to associate this task to my username.
TRMNL-warehouse-assembly-station.jpeg 352 KB
let's open Device Assembly.
Device Assembly utility
to assemble a device i need to determine some specs. namely the color and battery size. this prevents accidentally sending the wrong device to a customer. here i've chosen the Large battery size and Wood device color.
Scanning a PCB's serial to associate specs
The "Selected Printer" bar lets me wirelessly transmit these details to a nearby label printer. notice how the bar automatically splits the sticky label from the backing paper? every second counts.
Printed label for the assembled device
now i just need to assemble the device, so let's fast forward 2 minutes.
Assembling a (faux) Wood TRMNL with large battery
assembled devices are stored in our reserves and typically shipped to customers within a ~day. this lets the team pull pre-made devices in the morning, maximizing the completed orders available for couriers to pick up in the early afternoon.
TRMNL device reserve

shipping devices

here i've traveled another few steps to one of our 2x shipping stations.
TRMNL shipping station
i've picked out an order from a few minutes ago, let's put it together.
TRMNL order that needs to be shipped
with the UPS label in hand, i open the Ship Orders utility and scan the packing slip.
TRMNL Work - Ship Orders utility
after scanning the packing slip, TRMNL Work tells us what needs to go into the box.
scanning a packing slip to look up the order
next we scan the device itself, specifically the barcode printed earlier from Device Assembly. if we scan the wrong color or battery size, the tablet will present an error. this step also sets the device to "regular" or "developer edition" in our web application's database.
scanning a device to associate it with an order
and that's it. the device may now be packaged and await courier pickup.
TRMNL-order-fulfilled.jpg 256 KB
the front of our warehouse (barn) is a perfect place for this so i run it outside.
Left - FedEx; Right - UPS
but we're not done yet. let's continue with a sneak peek of our web interface that manages everything you saw above.

introducing TRMNL Warehouse Admin

suppose you flash a device with the wrong firmware version. assemble the wrong color. need to process an incoming return. or just plain want to get paid.

for these tasks we have a warehouse admin panel. this is different from our core application admin panel, which means nobody here can access your PII, plugins, etc. only logistics details.
Table of recent warehouse activity
pending permissions, users may unpair or reset a device's assembly. they can upload or blacklist a firmware release. a hotkey-driven modal makes this quick and easy.
command palette, inspired by Raycast
sometimes our firmware releases have bugs. now we can prevent devices from being flashed or shipped with buggy code.
tablets present an error if PCB with a blacklisted release is scanned
and finally, payroll. here we calculate earnings for any combination of team members, with different pay scales per task. no more white boards, spreadsheets, or manually counting cardboard boxes.
running warehouse payroll in 1 click

what's next

we rolled out this new tech last week. soon we'll have an even bigger logistics announcement. 

stay tuned, and stay focused.

Ryan Kulp

Founder at TRMNL