Skip to content
All projects
Web

Printora

A subscription Windows app for print shops: finds every printer, splits big jobs across machines, tracks every sheet

Year
2026
Status
Shipped
Role
Solo — Windows agent, license server, admin portal and site
Stack
C# · .NET 8 · ASP.NET Core · EF Core · PostgreSQL · React · TypeScript · Vite · WebView2 · IPP · SNMP · Neon · Render · Vercel
Printora cover
Discovery paths
4
Verification levels
A–D
Latest release
v1.2.0
Windows
10 / 11

Problem

A copy and print shop runs several printers of different brands, on USB, Wi-Fi and the network. A big order ties up one machine or gets split by hand, and when a printer jams in the middle nobody knows exactly which copy and page it stopped at, so sheets get printed twice or go missing. The product also had to be sold as a subscription, which means the program on the shop's counter PC must stop working when the subscription does.

Approach

Printora is three parts: a Windows agent at the shop that talks to the printers, a central license server, and the web interfaces. It is a rewrite of an earlier local Node.js version into .NET and React.

Operator UIReact · in WebView2.NET 8 agentWindows ServicePrintersIPP · queue · RAW · SNMPAdmin portalReact · VercelLicense serverASP.NET Core · RenderPostgreSQLNeon · EF Core
  • Every printer, without a model list. The agent looks for printers on four paths at once (the Windows spooler, mDNS, WSD and a network scan) and identifies each by serial number, not by IP address. It prints over IPP, the Windows queue or RAW 9100, whichever the printer supports best, and reads counters, toner, trays and faults over SNMP. Each printer gets a verification level from A to D that says how far its own page count can be trusted.
  • One order, several machines. A large job is split over the chosen printers with one command, and every batch is followed to its last sheet.
  • "Where did it stop?" When a printer stops, the app shows the copy and the page it reached, and the job continues from that sheet or moves to another printer.
  • A license that cannot be copied. The agent does not run without an active subscription. It activates against the server and receives an ES256-signed license token tied to a hashed hardware fingerprint; it checks the signature offline, asks the server again at intervals, and has a grace period for when the shop is offline.
  • Signed self-update. The server announces a new version in a token signed with the same key. The agent installs the download only if its size and SHA-256 match the signed announcement, waits for the jobs in flight to finish, installs silently and reopens on the same screen.
  • One language per side. C# for the agent, the server and their shared contracts; TypeScript and React (Vite) for the operator UI, the admin portal and the public site.

Result

Released: v1.0.0 on 31 October 2026 and v1.2.0 on 4 November 2026, with the Windows installer downloadable from the site. The admin portal manages subscriptions and the devices bound to each one, and the public site has a simulator of how a job is split across machines.

1 of 4
One file on three machines: 120 copies split 40 / 40 / 40, with the time it will take
One file on three machines: 120 copies split 40 / 40 / 40, with the time it will take