Named for the amphora — the ancient vessel whose stamped batch seals were history's first lot codes. Three thousand years later, the seal still means the same thing: you know exactly what's inside, and where it went.
Named for the amphora — the ancient vessel whose stamped batch seals were history's first lot codes. Three thousand years later, the seal still means the same thing: you know exactly what's inside, and where it went.
Everything in the vessel
No modules to license, no add-ons to negotiate — every feature ships with every install. Here are six of them; the other fifteen are one click away.
Lot, packaging version and expiry tracked as one chain. FEFO picking enforced, expired stock blocked at the shelf, and any lot traced to every customer who received it.
One trigger pull captures GTIN, lot, expiry, production date and quantity. Mis-keyed labels get salvaged rather than rejected, guarded by a 246-case parser test suite.
Guided runs on any phone or scanner gun. A bin scan proves the shelf, a product scan proves the item, GS1 catches the wrong lot — and overlapping orders batch into one walk.
Unlimited branded portals under your name, not ours. Catalog visibility, order limits, budgets, approval chains and shipping rules set per user group — configured, never coded.
Every receipt, pick, kit build and storage day rates itself onto the client invoice. Per-client rate cards, storage billed on schedule, no revenue quietly left on the floor.
Only in Amphora. Gather finds one SKU smeared across five bins and proposes the exact moves that fold it back together, handing you rentable locations. Nothing moves until you approve.
A floor plan drawn from the ledger, not maintained by hand: dock doors, aisles shaded by fullness, racks in 3D with real pallets and cartons. Click any location to see inside.
“A truck from Harbor, contents unknown” is a valid ASN. Unlisted items become provisional SKUs at the dock, and damage, shortage and overage log as discrepancies with photo evidence.
Destinations ranked by matching SKU, customer neighborhood and walk distance. Cold chain, hazmat and high-value rules are hard walls, not warnings — and every block explains itself.
Ship-within promises counted on the days you actually ship, against the hour the last truck leaves. Rush orders bill as rush; past the cutoff, the due date honestly moves.
Rush, late, due today, due tomorrow — live queues instead of an endless table. Pick slips print in walk order, orders edit in place, and shipping writes real inventory movements.
Cartons suggested from your own box catalog and weight-capped. Scan each item in — the wrong item is refused, the wrong lot caught — and no carton closes unweighed.
Rate-shop and print UPS, FedEx and USPS labels at the pack bench, on your carrier accounts or your clients’ own. Third-party billing and hazmat acceptance set per carrier.
Shippo, EasyPost or ShipStation on your own key. Watched-folder handoff for on-premise systems like ShipStore. A simulator for training, or manual entry. Switching is a settings change.
Order velocity burns available stock down into days of cover and a projected stockout date per SKU. Oversold SKUs surface in red, so you email the brand before they call you.
Full-screen scan and pick stations built for scanner guns, installable to the home screen as an app. No gun? The phone camera reads Code 128, EAN/UPC, QR and DataMatrix live.
Pick slips that draw the route and prep the walk. Batch slips that name the bin for every grab. Packing slips in your client’s brand, with lot codes for recall and no prices.
Locked brand templates with live proofs and press-ready CMYK output. Business cards, badges and flyers ordered in the same cart as warehouse stock.
Everything the UI does, the API does. Scoped keys, webhooks and OpenAPI documentation generated from the same schemas the routes validate with — served from your own install.
Connect OpenAI, Gemini or Claude for natural-language reporting and demand insight. Your key, your spend, your data — and entirely optional.
Stock derives from an append-only movement ledger, never a mutable counter. Available means available-to-promise and goes negative when you are oversold. Every screen agrees.
Straight from the product
Unretouched screenshots of the current build, in eight short chapters — roughly the order you'd actually set it up. Start anywhere, click any screen to see it full size.
01 Set up your team & controls
Enlarge ⤢
Minutes from install to team. Five roles — owner, admin, warehouse, vendor, dev — with a menu and an API that follow the role: the floor sees the floor, an integration engineer sees only the API reference. Password resets that sign the target out everywhere, one-click deactivation, and an append-only audit log recording who, what, when, and from where.
Enlarge ⤢
Two-factor, zero cloud. Any account can require an authenticator code at sign-in — TOTP computed on the phone, so no SMS gateway, no email dependency, works air-gapped. Single-use backup codes, replay-guarded logins, and audited admin resets for the day a phone goes missing.
Enlarge ⤢
Your warehouse, your brand. Upload a logo, pick a color, and the whole platform re-themes — sign-in screen, sidebar, every surface. Your clients see your company, not ours.
Enlarge ⤢
Documents dress themselves. The same branding — plus each client's own logo — flows onto generated paperwork: statements of work with the fee schedule pulled live from the client's rate card today; pack slips, BOLs, and invoices as they ship.
02 Build the warehouse
Enlarge ⤢
The building, drawn like a building. Dock doors on the apron, receiving inside the doors, every aisle shaded by how full it is, the cold room in blue, quarantine caged off. The plan renders live from the ledger — it isn't a diagram someone maintains. Click any zone to manage it.
Enlarge ⤢
Racks a five-year-old can read. Every shelf is a location: more boxes = more stock, a wooden pallet = a pallet position, a red edge = an expired lot inside. Still built in one sentence — "aisle S, 4 bays, bins below, pallets above" — with the picker's serpentine walk path previewed before anything is created.
Enlarge ⤢
See the building, shelf by shelf. One zone, three views of the same live ledger: a searchable table, the picker's walk map, and the racks in 3D. Click any slot and the panel shows exactly what's inside — down to the 48 damaged units of lot VB6102 someone needs to deal with.
Enlarge ⤢
Lots with their own expirations. Two batches of one serum: one selling, one auto-flagged Expired the day it lapsed — computed from mfg date + shelf life when nothing's printed, packaging version tracked per batch. Every movement books by barcode scan, counting up by pack level.
Enlarge ⤢
An inventory ledger, not a spreadsheet. Stock on hand is always the sum of an append-only movement history — receipts, moves, reason-coded adjustments, quarantine releases, destructions. Receipts that arrived against an ASN carry it as a chip: click through to the truck it came in on. And every list in the app — stock, SKUs, inbound, containers, low stock, expiring lots — pages cleanly past thousands of rows and exports the full filtered set as CSV.
Enlarge ⤢
Cycle counts that keep the ledger honest. Cut a blind sheet by zone, client, or SKU — the expected quantity never reaches the counter's screen or the printed page, and a zone count also visits every bin the system believes is empty, because that's where the misplaced pallet hides. Counting changes nothing: stock moves only when a variance is approved, and then as an ordinary reason-coded adjustment in the same ledger — reckoned against current stock, so a pick that ran mid-count is never silently reversed.
03 Receive what actually shows up
Enlarge ⤢
The dock runs on a calendar. Trucks book real doors and ramps; walk-ins get logged after the fact, no-shows get marked, and every appointment links to its ASN. Check-in is one tap when the driver calls from the gate.
Enlarge ⤢
ASNs that tolerate the unknown. "A truck from Verdant, quantities TBD" is a legal ASN — lines firm up as the trailer empties. Expected vs received tracks live per line; the crushed case and the booklets nobody announced become recorded discrepancies, not tribal knowledge.
Enlarge ⤢
One desk, three ways to book it in. The pallet desk is scan-first: fire each case barcode as it comes off the truck (a GS1 label fills lot, dates, and units; a repeat scan counts one more carton; the pallet's SSCC becomes its license plate), go item by item, or land a whole container by CSV — validated through the real receiving logic before a single unit posts. All of it against the ASN, so provenance follows every receipt into the ledger.
Enlarge ⤢
Putaway that thinks, and Gather™ — only in Amphora. Every unplaced pallet gets ranked destinations: same SKU first, then the customer's own neighborhood by walk distance, storage class enforced (a refrigerated SKU is never offered an ambient aisle). Below it, Gather watches for drift — one SKU scattered across five bins, a customer's stock straying across zones — and proposes the exact moves that bring it back together. Nothing moves until you click.
Enlarge ⤢
A screen built for scanner guns. Scan mode: one always-focused input eats every scan — bin labels set the location, SKU barcodes count up by pack level. No barcode? Search by name and see where that item already lives before you put it away. Up top, guided runs: scan a pick slip, an order, or a count sheet and the station walks the aisles with you — on a gun, or a phone camera.
Enlarge ⤢
A pallet is a real thing here. Three products in ten cartons on one pallet? Every carton gets its own scannable license plate. Move the pallet in one action and everything on it follows — and the location page shows exactly which carton holds what, down to the lot. Placards print at 4×6 label size for the pallet, every carton, and every stock movement — with the lot and expiry boxed big, because those are the two lines a warehouse reads first.
The 4×6 placard — tap to read
04 Take the orders
Enlarge ⤢
Outbound, allocated earliest-expiry-first. An order isn't a name and a quantity — it's a structured ship-to and bill-to, carrier and service, desired ship date, signature, third-party billing, PO, tags, custom fields, and notes. Allocation reserves the earliest-expiring lots first, respects each customer's minimum shelf life, and either backorders a short line or says so plainly. Rush inside the customer's window ships same-day; after the cutoff the promise honestly moves to the next shipping day. Every placement rates its order, pick, and unit fees onto the invoice.
Enlarge ⤢
A triage board, not an endless table. At real volume nobody scrolls a flat list of orders. The board queues them the way a floor works them: Rush first, then Late, Due today, Due tomorrow — each with a live count and its most urgent rows, one click from the full paginated queue. From any order: print the pick slip (numbered stops down the actual walk path), drop the brand's own packing slip in the box, edit the order in place, advance it picking → packed → shipped — and shipping writes the real inventory movements.
Enlarge ⤢
The reorder call list, computed. Ordered units over a window become a velocity; the velocity burns down today's available stock into days of cover and a projected stockout date. Oversold SKUs — where open orders want more than the shelf holds — surface first in red with a negative availability, not a comforting zero. Filter by client, export the CSV, send the replenishment email before the brand even asks.
05 Pick the walk, not the list
Enlarge ⤢
Amphora builds the cart. The pick queue doesn't just list orders — it looks at every route and suggests the carts: orders whose walks overlap, batched so the merged run genuinely beats walking them separately. And it shows its math instead of hiding it — "9 stops instead of 21, saves 57% of the walk, one pass through PICK." Urgency is never traded for efficiency: carts build around the rush and late orders first, so convenient orders join the urgent one's walk — never the other way around. One tap loads the cart and the run begins.
Enlarge ⤢
Scan-to-verify, at every stop. The pick station leads the walk one stop at a time in walk-path order. Scan the bin label to prove you're at the right shelf; scan the product to prove you grabbed the right item — a GS1 barcode even catches the right product in the WRONG LOT before it leaves the aisle. Shorts take a reason, and completing the run releases anything unpicked back to available stock — no phantom reservations. Batch a cart of orders into one walk — a lettered picking bin per order, every stop naming which order the grab goes to. Runs on any phone or scanner gun; installable as an app.
Enlarge ⤢
Pick mode: the gun's front door. Like scan mode for receiving, picking has a full-screen station of its own. Scan pick slips one after another — each scan drops that order into the cart as a lettered picking bin — then one tap starts the merged walk. Every pick slip prints a barcode of its own order number, so the paper off the printer IS the key into the station. No sidebar, no mouse, nothing a gloved hand can miss.
Enlarge ⤢
The same route, on paper. Prefer a clipboard? The printed slip is the station's twin — same computation, so paper and screen can never disagree. It opens with BEFORE YOU WALK (lift truck for high pallet positions, cage access, insulated tote, hazmat handling — each with its stop numbers), draws the route as numbered stops with zone labels, then lists every pick with lot, expiry, checkbox, and handling flags.
Enlarge ⤢
One cart, one walk, on paper. The batch pick slip merges up to twelve orders into a single route. The cart legend maps each lettered picking bin to its order and ship-by date; every row's PUT INTO column names the exact order the grab goes to — "Bin B ×16 — LUMI-000014" — so nothing lands in the wrong box. The ship-by chip shows the earliest deadline on the cart, in red when it's late.
Enlarge ⤢
The paper in the box speaks for the brand. The packing slip leads with your client's name and logo — their buyer ordered from them, not from you. Contents with lot codes for recall traceability, no prices, backordered units marked plainly with a ships-separately note, and a HANDLING box for flammables, cold chain, and signature-required. Your operation appears only in a quiet fulfilled-by footer.
06 Pack it, then ship it
Enlarge ⤢
The bench, in one screen. What's on the cart, the boxes it goes into, and the carrier handoff. Boxes are suggested from your own catalog and every one of them is editable — but an empty carton, an unweighed carton, or a unit nobody picked will not get past the close.
Enlarge ⤢
One slip per box. Boxes get separated in transit, so every carton carries its own sheet: BOX 1 OF 2, what's in this box, its own tracking number — and an also in this shipment list so a box opened alone reads as part of a shipment instead of a short one.
Enlarge ⤢
Your carrier stack, not ours. API aggregators with your own key, the watched-folder handoff on-premise systems like ShipStore actually use, a simulator for training, or plain manual entry. Every one writes the same columns, so the packing slip, the billing and the ledger never learn which you chose.
07 Onboard customers
Enlarge ⤢
The book of business, one screen. Every brand with its code, its ship-within SLA, and its status. The lifecycle is enforced, not decorative: prospect → onboarding → active → inactive → offboarded, and every status gates exactly what's allowed — a prospect can't order, an inactive customer still pays storage, and nobody offboards while holding inventory. No SLA, no orders: every order needs a ship-by promise.
Enlarge ⤢
A customer file you can read at a glance. Code, portal, contact, rate card — and the shipping SLA, computed live in the rail: "an order placed today must ship by Wed, Jul 22." Ship early, fine; after that date, it's late, and the ordering pipeline will know.
Enlarge ⤢
The SLA clock knows your week — and your cutoff. Tell Amphora which days you ship, which days the building is closed, and when the last truck leaves. Carriers pick up once a day: an order placed at 9:55 AM on a 2-day SLA ships today and tomorrow; the same order at 9:55 PM starts the clock tomorrow and, over a weekend, is honestly due Monday. The preview computes the real date before you save, with the same code that stamps every order.
Enlarge ⤢
Your fee schedule, modeled exactly. Portal, order, pick, unit, and rush fees; bin and pallet storage; receiving, mixed-SKU separation, inspection, destruction certificates. Clone a card, negotiate, assign per customer.
Enlarge ⤢
Every portal configured, not coded. Views, badges, price and inventory visibility per customer — plus the rush window: the hours when a Rush button appears, takes the rush fee, and jumps the pick queue.
Enlarge ⤢
Carriers down to the service level. UPS Ground but never overnight? Two checkboxes. Third-party billing on the customer's own account, plus your own trucks and messengers as first-class carriers — with hazmat acceptance per carrier, so flammables never get offered to a carrier that would refuse them.
Enlarge ⤢
Catalogs that onboard in minutes. Every SKU lives inside its customer — searchable, tabbed, never deleted. Bulk-load a whole catalog from the CSV template: validate first, import with line-by-line feedback.
Enlarge ⤢
Every SKU rule in one workspace. Price breaks, shrinkwrap pack ordering, min/max quantities, low-stock alerts, rolling ordering limits that block or route to approval — each tab saves on its own.
08 Integrate & learn
Enlarge ⤢
API-first, documented from day one. Everything the UI does, the REST API does — the reference is generated from the same schemas the routes validate with, served from your install.
Enlarge ⤢
Docs that can't go stale. A built-in knowledge base updated with every release — 43 articles, a glossary, and a troubleshooting index that explains every refusal the system can raise. Full-text search lands you on the exact paragraph, tables render live from the same code the API enforces, and every article downloads as a branded PDF.
Take it with you
Generated from the product itself — the fee table, the carrier list, the shipped/roadmap marks and the throughput figures come out of the same code the warehouse runs on, so the paperwork can't quietly age. Read any of them in the browser, or take the PDF.
The arithmetic instead of the claim — plus a one-week method for measuring your own billing leak rate rather than trusting ours.
What Amphora is, the six differences that show up in a demo, where it fits by vertical, and the trade-off stated plainly. Leave it behind after a call.
Written to be pasted into an RFP: every capability marked SHIPPED or ROADMAP, module by module, with the fee taxonomy, carrier list and measured throughput at two million ledger events.
Where data lives, transport and TLS, exactly how each secret is stored, patch and vulnerability response, roles, the audit trail, backup and exit — including what we don't claim.
Week by week: stand it up, receive for real, run the floor, then reconcile. Plus seven questions worth asking every WMS vendor — including us.
Self-hosted, sovereign
Amphora installs on your own infrastructure and stays there. No multi-tenant cloud, no per-transaction tolls, nothing phoning home.
A single container. SQLite out of the box, Postgres when you're ready. Live in an afternoon.
Client data, order history, pricing — all of it stays on hardware you control. Compliance teams exhale.
Carriers, AI, storefronts — every outside connection uses your own credentials, added by you, removable by you.
Curious how it would handle your floor? Tell me what you run today and what breaks — I'll show you the screens that matter and skip the rest. Thirty minutes, no deck.
Book a demo