ITMS
ITMS: BBTech's inventory management system, from an Excel workflow to a web application
Excel formulas and VBA automation; Print Engine direct integration; drawer UI and CSV export; hardware-identity architecture audit
Operational Workflow & State Machine
End-to-End Pipeline- 01Excel stock tracker in daily use
- 02Moved to a web application
- 03ITMS released and in use
- 04Troubleshooting, maintenance and improvements
- 05Label printing through the Print Engine
Related systems
Separate systems- Independent printing engine integrated with ITMSRPOMS Print Engine
The Web Bluetooth label-printing workstation. Direct button integration and CSV export deployed in ITMS (commit 0f67de6).
Read its case study - Hardware identity bridgeBBTech Laptop Tool
Portable .NET 8 QC utility extracting SMBIOS serials and motherboard UUIDs to provide immutable hardware identity to ITMS.
Read its case study
Overview
ITMS is the inventory management system for BBTech's refurbished-device operation: devices are received, identified by barcode and group SKUs, moved through their stages, and sold or handled under warranty. This page is about how it got there and what my part in it has been, which changed from phase to phase.
The web application's code was written by another BBTech developer. The contributions described on this page are mine; the system's internals are not shown because it is internal company software.
The Excel workflow
Before any web application, the operation ran on the BBTech Stock Tracker, a macro-enabled Excel workbook that went live on 1 July 2025. I worked on it as a small product, and its own change history records versions from June 2025 to January 2026: splitting receiving, technician and e-commerce work into separate sheets; generating barcode SKUs from the serial, model and specification; group SKUs so e-commerce could list variants together on Easystore; switching long SKUs to QR codes; and tracking cost, sell price, sold date and warranty end date.
The automation lived in formulas and VBA. A macro logs each status change with the timestamp, the time spent in the previous stage and the person who made the change, so the time each department took could be measured. An Update button lets staff scan a SKU and edit its record without touching formula-driven cells. A user guide explains which columns are formulated, which are drop-downs and which are free text, and how to extend the drop-down lists, and several versions were changes users asked for. Labels were printed from it on a NIIMBOT printer, the same printer the Print Engine later drives.
The team ran the operation on it and shared it as a weekly submission. It is also where I learned the process itself, which is what still makes me useful when the web system misbehaves.
The web application
BBTech then moved the workflow into a web application. I was committed to other BBTech projects at the time, so another developer built the web ITMS: a Next.js, TypeScript and Supabase application covering devices, SKU generation, sales, warranty, members, audit history and reporting.
I did not write that application, and this portfolio does not claim it.
Supporting it in use
Once the web ITMS was released and the team started using it, I became actively involved again. I troubleshoot problems as they come up, fix issues, and make improvements, working with the developer whenever something needs changing in the application itself.
Recent examples in the code: the Excel export library is now loaded only when someone exports, so pages with tables no longer ship it, and a duplicate fetch of the device list on first load was removed.
Solving label printing
Label printing was one of the problems I took on, and my manager asked me to solve it. Rather than patch around it inside ITMS, I built the RPOMS Print Engine: my own, independently developed browser workstation that drives a NIIMBOT B1 Pro thermal printer over Web Bluetooth, with a device-label module for BBTech's QR labels and a relay page that other applications print through.
I built the ITMS side of that integration, merged and deployed on 4 October 2026 (commit 0f67de6): a small print service that validates a device's barcode and group SKUs and opens the relay, and print buttons on the new-device form, the device details and the device drawer, plus a printer-setup button in the devices header. ITMS never talks to the printer; the open, connected Print Engine does, and reports the real result back.
What's live, and what isn't
“It exists in the repository” and “it runs in production” are different claims. This is the difference, stated rather than left to be assumed.
- ImplementedBBTech Stock Tracker (Excel)Live from 1 July 2025 and used operationally, including weekly submissions; superseded by the web ITMS.
- ImplementedWeb ITMSIn use at BBTech. Developed by another BBTech developer; I troubleshoot, maintain and improve it.
- ImplementedRPOMS Print Engine device-label moduleLive as part of my independently developed Print Engine.
- ImplementedITMS printing integration and recent fixesMerged into ITMS and deployed on 4 October 2026 (commit 0f67de6); print buttons on the device drawer, details and new-device form, plus CSV export.
Technical stack
Excel phase (my work)
Web application (base by another developer)
Printing & integration (my work)
Hardware audit (my work)
Limitations
- ITMS is internal company software, so there is no public link or screenshot.
- The Excel tracker is internal and contains operational data, so it is described rather than shown.
What's next
- 01Validate label printing on the line with the real printer across a full batch.
Source and further reading
ITMS is BBTech's internal software. The web application was developed by another BBTech developer; this page describes the Excel tracker I worked on and my contributions to the web system at a level that is safe to share publicly, with no internal screenshots, data or credentials.
Finished the technical breakdown?
Return to the concise HR overview or discover other projects in the portfolio.
Writing from this work
Why Hardware Identity Matters: How Generated Stock Prefixes Concealed Duplicate Refurbishments in ITMS
An architectural audit of enterprise refurbishment systems: why generating sequential stock prefixes like 'HP1' creates phantom inventory, and how binding to immutable SMBIOS hardware serials provides a tamper-proof audit trail.
Versioning an Operational Spreadsheet Like Software
A stock tracker's Change History sheet as a release log: eight iterations before go-live, a 1.x line after, user-requested versions, and what an in-file changelog cannot give you.
Why My VBA Maps Columns by Header Name, Not Column Number
One workbook held both approaches: event macros with hard-coded column numbers that drifted as columns were added, and an update macro that finds columns by header text. The difference.
Modelling a Multi-Stage Refurbishment Pipeline in Excel
Following one laptop through an Excel stock tracker: a completeness gate at receiving, an automatic hand-off list, status derived from department ticks, e-commerce counts, and EDATE warranties.
What Survives When an Excel Tracker Becomes a Web App
Mapping an Excel stock tracker's sheets, formulas and macros onto the tables of the web system that replaced it: what carried over unchanged, and what had to become explicit.
Writing a User Guide Into the Spreadsheet Itself
A stock tracker's in-workbook guide: a colour legend for formula, drop-down and free-text columns, a sheet-by-sheet purpose list, and how the guide drifted from the formulas it described.
Dependent Drop-Downs With INDIRECT and Named Ranges, and What They Cost to Maintain
A Brand → Model drop-down built with INDIRECT and one named range per brand works well on day one. The two update procedures, orphaned #REF! names and fixed ranges are what it costs later.
Letting Another Web App Print Through an Open Tab: BroadcastChannel, Web Locks and COOP
How a tiny relay page lets another web application print on a Bluetooth printer held by an already-open tab, with one tab answering via a Web Lock and the printer's real result reported back.
Maintaining a Web System I Didn't Build: Small, Scoped Fixes
Three small fixes to a Next.js inventory app another developer built: a lazily loaded Excel library, a duplicate fetch on first load, and a reset-password redirect, kept reviewable.
Chrome Throttled My Bluetooth Printer: Moving Timers Into a Web Worker
Labels slowed from about 4 seconds to 13 or more whenever the print tab was in the background. The cause was Chrome's timer throttling; the fix was a tiny Web Worker that owns the waits.
Adding Label Printing to an Existing Next.js App Without Touching the Printer
The calling side of a print integration: validating SKUs the way the printer app will, passing them in a URL fragment, detecting blocked pop-ups, and refusing to print unsaved changes.
Logging Every Status Change in Excel With VBA to Measure Time per Department
Formula-driven status changes don't fire Worksheet_Change. How a stock tracker logged them with Worksheet_Calculate, timed each stage, and read the log back with SUMIFS and LOOKUP(2,1/…).
Generating Barcode and Group SKUs in Excel From Spec Columns
How an Excel stock tracker built a per-brand serial that rolls past 99, a barcode SKU and a variant group key from spec columns with LET and TEXTJOIN, and where formula IDs break.