S/003

Service OS

Intake to invoice for a technical service business — job records, customer notification, printable legal documents, and a licensing layer so the same system can run for more than one company.

StatusOngoing
Active2025 —
CategoriesSystems, Automation, Software
StackPHP · MySQL · Web Push (VAPID) · HTML2PDF · PWA · Service Worker
01

Context

A technical service desk is a queue with legal consequences. Every device that comes in carries a promise about time, price and condition — and every one of those promises is a document someone will eventually ask for.

02

Friction

The status of a job lived with the technician holding it. Customers called to ask; the counter called the workshop; the workshop guessed.

Documents — receipts, terms, repair conditions — were assembled by hand for each job, which meant they were assembled inconsistently.

A repair isa promise witha paper trail.

03

System

The job record is the only object in the system. Status is a state machine on that record, not a field someone types into, so every transition is recorded with who and when.

Documents are generated from the record at the moment they are needed, which makes them consistent by construction.

Architecture
Intake / CounterJob recordStatus engineWeb pushDocument generatorLicensing APISuper-admin
04

Interface

The counter view is a single screen: search, open the job, change its state, print. The workshop view is the same record with the customer-facing noise removed.

Installed as a progressive web app, so a technician's phone becomes a terminal without an app store in the way.

05

Automation

Web push carries each state change to the customer. The question "is it ready yet" stops being a phone call and becomes a notification that was already sent.

The legal and commercial documents that used to be typed are now a consequence of the job existing.

06

Data

A licensing API separates the product from any single business that runs it. Each installation is an identified tenant with its own data, its own documents and its own notification keys.

A super-admin layer sits above the tenants — deliberately thin, and deliberately not able to see everything.

07

Evolution

The plugin boundary is where the system is still growing: extensions that add a document type, a channel or an integration without touching the job record itself.