TRAVIS INSKEEP

Shopkit

The operations system behind a cannabis retailer's signs, printers and store network, grown from a network toolkit into a studio that opens all 706 of the store's Photoshop sign masters.

Shopkit is the in-house operations system for THC of Olympia, a licensed cannabis retailer, and it runs on the store's own network. It began in November 2025 as a network and printer toolkit and grew into the place the store's signs are made.

The network. A command-line kit inventories the store's devices, checks printers, VPN and security, and verifies each workstation's configuration over SSH, with the front-desk PC routing remote access into the shop. Behind it, a FastAPI service on SQLite watches device health on a schedule, raises alerts only during store hours, and keeps its mail credential encrypted with Windows DPAPI.

The sign station. Employees find a product in the live catalogue by name or barcode, lay out a shelf sign, see exactly what will print, and send it to the printer. New signs in larger sizes are requested on a shared board; every existing sign, at any size, opens in the studio as an editable copy. Product data comes from the store's ordering app server to server, so no catalogue credential reaches the browser, and a product without reviewed print artwork fails closed rather than printing its screen logo. A Flutter helper on Windows renders each sign at exactly 600 by 300 from one raster for both preview and print, and a release ships only if a pinned reference render reproduces exactly. Signs print two inches by one, twenty-four to a Letter sheet, through a PDF the service writes itself, because a browser lets the print dialog rescale a page, and a sign that has to slide into a shelf holder cannot come out at 94 percent.

The studio, in development. The store's sign library is my own design work: 706 layered Photoshop masters from 2018 to 2026, 421 of them quarter-page. Shopkit indexes the whole library, imports every master with psd-tools into its own layer model, 7,028 layers with no import failures, and rebuilds each one: 688 of the 706 match Photoshop's own composite to within 8 levels on every pixel. A React and TypeScript studio opens any master as a copy, so a price or logo can change without touching the original, and saves a small project file bound to that master by hash. Which text fields an employee may edit is decided by rendering every one of them and checking the new text actually shows: a cheaper check found 7 fields where a flattened layer would hide a new price, and the full render sweep found 135. The studio is in review and not yet released to staff.

Category: programming

Tech: Python / FastAPI / SQLite, psd-tools, React / TypeScript / Vite, Flutter (Windows), resvg (WASM), Shell

Role: Designer and developer

Blaze gummies, a quarter-page sign in swirling seventies colour: BLAZE in rounded letters, $25 for a 10-pack of gummies, over waves of orange, pink, teal and gold with small sparkles.
CNW shatter: a translucent amber shard held up on a stick against a worn mauve card, SHATTER across the top, the CNW apple mark and $15 at the foot.
Lifted sugar crystals: a man floating sideways in front of an orange brick wall painted with the Lifted wordmark and wings, $30 Sugar Crystals in gold lettering above him.
Northwest Concentrates disposable vape: a saturated purple and pink mountain lake at dusk, NORTHWEST in green neon above, $35 and DISPOSABLE VAPE in heavy white type.