Self-taught C# / .NET developer building production tools and web APIs. Based in Lebanon, Indiana, in the Indianapolis area.
A printer-agnostic print spooler built from scratch. A REST API and Blazor Server dashboard queue print jobs, deliver them to network printers over IPP, and push live status to the browser with SignalR. Printers are discovered over mDNS and picked up at runtime.
Each printer gets its own monitor with its own cancellation token, so one stalled printer never blocks the others. After a crash, unfinished jobs are re-checked against the printer and marked failed if completion can't be confirmed. Verified end to end against a physical printer.
A terminal application for releasing carton label print jobs in a book distribution warehouse and watching them through to completion. It splits the release file, distributes the pieces across five BarTender instances, tracks every file with folder watchers, retries failures, and can be cancelled and rolled back cleanly mid-run.
A C# rebuild of an earlier PowerShell script. It keeps the same workflow, with more readable code, a clearer live monitor, and a Teams summary posted after each run as a record that it ran.
A dependency-free PowerShell terminal UI for daily label print operations: queue, transform, monitor, reprint, audit, and lookup. Input handling is hand-built, input is sanitized, and errors are reported in plain language telling operators what went wrong and why.
Builds printable label pages from order data and sends PCL directly to printers over raw TCP on port 9100. Templates are JSON, with text positioned on a normalized 0 to 100 scale, and pre-rendered elements are cached so they aren't regenerated. Built for the 4-up layout. Rewritten from PowerShell to C#, roughly doubling throughput.
Demoed as a proof of concept for print-on-demand. A 15,000-label release that took about 40 minutes through BarTender would render in about 10 seconds, so labels could be generated when the floor needs them instead of pre-generated in bulk.
While building it, I found the format's documentation didn't say which of the 100 data fields each label type actually needed. I started a tool to analyze a year of real files and classify each field as required, often used, optional, or never used, so a production version could validate input properly.
I came up through warehouse and print operations at Hachette Book Group, where I started
building tools to fix problems I was living with every day. What started as scripts became
full applications that ran in daily production. I taught myself C#, PowerShell, and
PCL by building them, and learned Sybase ASE and PowerBuilder
working alongside the team's senior developer.
I am currently looking for a developer role, ideally in the Indianapolis
area.