Case Study · Deployed / Active

CONNEX 1750

A packing-list generator that turns a stack of BOM PDFs into sealed, stamped DD Form 1750s with a commander-ready SITREP. Soldiers pick a unit profile, pack the connex on a 2D split screen, seal it, and download the paperwork instead of retyping it by hand.

FlagshipIn use packing real connexes today
715brigade formations in the profile gallery
132automated tests passing
~70%faster than the paper workflowdraft figure
Problem

The DD1750 eats hours it shouldn't

Packing a connex means matching a bill of materials against boxes, hand-typing a master 1750 and a 1750 per box, then chasing signatures before anything can ship. Miss a line item and the whole stack gets redone. The paperwork is the bottleneck, not the packing.

Build

Six steps, one seal

An operator picks the unit from a searchable gallery of 715 brigade insignia, which pre-fills the header fields. They name the connex, set the box count, then work a 2D split screen: BOM cards on the left, box cards on the right, drag one onto the other. Individual items get added straight into a box, no separate step.

Seal data (SUN, CONNEX, SEAL numbers, packed-by, signed-by) comes next, then a per-box review checklist. "Apply Stamp & Seal" locks the connex and downloads a ZIP straight away: a master 1750, one 1750 per occupied box, done. Pack another connex under the same profile, or close out and generate the commander's SITREP across everything packed.

Design callNo seal animation. The button shows a spinner and status text, then the browser's own save dialog is the confirmation. One less thing between the operator and the next task.
Proof

Soldiers are using it, not demoing it

This isn't a prototype sitting in a repo. It's already replacing the hand-typed DD1750 process for soldiers packing real connexes. The legacy flat-file workflow stays available under a collapsible "Legacy" section, so units can switch over at their own pace instead of being forced into the new flow on day one.

Stack

What it's built on

Flask 3.0, Python 3.11, and gunicorn on the backend. JSON files on disk for persistence, no database to babysit. PDFs render with reportlab, pypdf, and pdfplumber. The frontend is vanilla JS ES modules: no framework, no build step. It deploys to Railway.

Status

Live, with an AI helper queued next

The core workflow runs a single gunicorn worker on purpose. It's a single-user tool, and that keeps the state model simple. Next up is wiring the NSN/LIN suggestion helper that's already stubbed into the packing step, so an operator can type a plain description and get the right line item back.