A maintenance system that tells you what it doesn't know.
Zenith is a computerized maintenance management system built for the people who have to defend its numbers. Every figure names the evidence it was computed from. Every refusal names its own reason. And where there is not enough data to answer, the screen says so instead of printing a confident zero — because a number nobody can reproduce is how a maintenance programme quietly stops being believed.
Assets · Work orders · Preventive · Parts · Safety · Reporting — bilingual EN / FR, multi-site, WCAG 2.2 AATwelve modules, one set of records
Each module reads the same registers, so a tile on a dashboard and the row a click lands on cannot tell different stories. Open any of them for the detail — including a plain account of what each one does not do yet.
Asset Management
Nine kinds of knowledge on one record — the register, the engineering specification, how it fails, what you decided about each failure, and what actually happened.
Explore 02Work Order Management
Three clocks, readiness gating and guard rails — so a job is raised, planned, done and closed without the record and the work drifting apart.
Explore 03Service Requests
Plain-words intake, a triage queue, and a conversion gate that refuses with the blockers by name — with an append-only timeline the requester can actually follow.
Explore 04Preventive Maintenance
Calendar and meter on one schedule, fixed or floating, with drift measured and compliance judged against the tolerance the schedule actually carries.
Explore 05Predictive Maintenance
Condition rules that don't get muted, and a projection that publishes its fit and its point count beside every date it gives you.
Explore 06Parts & Inventory
Balances folded from one append-only ledger, available that is not on hand, blind counts, and the parts that went out and never came back.
Explore 07Safety
Hazards where they actually are, PPE derived rather than typed twice, and permits that are windows in time — issued by somebody who is not the holder.
Explore 08Reports & Analytics
A report stores the question, not the answer — and every answer arrives with a receipt for what each filter removed.
Explore 09Report Scheduler
Capture a report exactly as configured, pick a pattern, and it runs unattended on your server and arrives as a download link rather than an attachment.
Explore 10Automation
Decision tables that name the row that decided, and workflows published as frozen versions — so a run in flight finishes under the rules it started with.
Explore 11Integration Hub
A mapping contract designed against one real record, dry-run until it holds — over a published API contract with the client generated from it.
Explore 12Contractors & Vendors
One compliance rule, two doors: the insurance or certification that blocks a work assignment blocks a purchase order by exactly the same test.
ExploreThree habits, everywhere in the product
Feature lists across this category are near-identical, so the honest way to choose between them is to look at what each system does when it is uncertain, when it has to say no, and when somebody asks where a number came from. Here is what ours does, in all three cases.
A blank is a different fact from a zero
PM compliance with nothing due. Mean repair time with no repair history. Hours per finished job with nothing finished. Each of those is unknown, not bad — and a printed 0% is a crisis somebody will act on, on a programme that has done nothing wrong. So the figure goes blank, and where there is room the screen says why.
- A ratio with a zero denominator is not a low score — it is not a number, and printing one is the fastest way to lose an argument you were right about.
- Occurrences that came due and were never done count against compliance — that single piece of arithmetic is what stops a neglected programme reporting 100%.
- Stocked parts with no reorder point are counted and named — never quietly folded into “healthy”, which is where a shortage hides.
- Unestimated jobs are excluded by count — because unestimated is not free, and averaging them in is how an estimate flatters itself.
Refused, in the words of the rule that refused it
Never “invalid”, never “an error occurred”. A job that cannot be issued, a permit that cannot be signed, a workflow that cannot publish, a report that cannot run — each comes back as sentences that name the step, the field, the part or the person. A refusal nobody understands is a refusal nobody can clear.
- Refusals travel intact between modules — the item master's reason for blocking a part appears at the storeroom counter in the item master's own words, rather than restated and slowly drifting.
- Codes are resolved to names — a blocker nobody recognises is a blocker nobody fixes.
- Faults sort above shortages — a procedure whose arithmetic is impossible is wrong everywhere; a plan short of filters in Victoria is fine in Vancouver. Different problems, different owners.
- They are checked, never cached — readiness changes the moment a certificate lapses or somebody takes the last part off the shelf.
Every answer shows what it started from
“Open work by site: 14” convinces nobody until it also says it began with thirty-one work orders and which filter removed which seventeen. So a report prints its receipt, and a dashboard section prints what it deliberately left out — including the rows that would have flattered it.
- Computed live, cached never — a stored answer is a cache with an opinion about staleness, and a stale number with a confident face is worse than a slow one.
- Exclusions are named, not dropped — “3 cancelled work orders excluded”, “1 finished corrective work without failure coding”.
- The evidence travels with the figure — a reliability number carries what was counted and what was left out, so a challenge lands on the data rather than on the person presenting it.
- One definition of everything — “open”, “overdue” and “available” mean the same thing on a report, a tile and the register page, because all three fold the same rows.
Five people, five different pages
A home screen everybody shares is a page everybody scrolls past. Zenith composes it by role, because what a technician needs on a Monday and what a planner needs are different questions — and the product already knows which of them is signed in.
What's mine today
The jobs assigned to them, the safety facts before they walk up, the steps to record, and a way to give back what they didn't use.
What isn't ready
Work that cannot be issued yet and exactly why — a missing part, a lapsed ticket, a procedure with no steps — before it reaches a Monday morning list.
What's waiting on you
Approvals, stopped work, and the completion queue where a second pair of eyes closes a record the doer cannot close themselves.
What's short
Every room's health on one row, what is below its line measured on available rather than on hand, and what is out on a van and never came back.
What keeps breaking
Failure coding that adds up, bad actors ranked on hours lost with their work orders attached, and whether the preventive programme is actually preventing anything.
The things that are hard to add later
Bilingual parity, accessibility, site scope and your own vocabulary are all cheap to build in and expensive to retrofit. They are in the foundations here rather than on a roadmap, which is why every screen has them rather than the ones somebody remembered.
Bilingual by birth
Full en-CA / fr-CA parity on every screen, hint, empty state and refusal — plurals handled properly rather than by concatenation, and the refusals translated too.
Accessible as a build rule
WCAG 2.2 AA throughout: real table and tab semantics, states announced in words, charts carrying text equivalents, and focus that moves to the field an error refers to.
Site scope that bites
Enforced in the query rather than by hiding a menu — somebody scoped to Victoria is never offered stock in Calgary, because they cannot walk to it.
Your words, everywhere
Rename Work Order, Asset, Storeroom or Permit and every heading, tab and label follows — never what a filter matches on.
We publish our boundary
Every maintenance system has a line between what it does and what it is going to do. Most leave you to find it in month four. Ours is written on the screens themselves, and on every one of the module pages above — because a demo that oversells costs far more than it wins.
The rules first, then the runtime
The order is deliberate. A schedule pointed at a procedure nobody checked just fails faster and more often; a rule engine that cannot say which rule fired is a mood however reliably it runs. So the part a person designs and argues with is built first, and made checkable before anything acts on it.
- Nothing is faked to demo well — a duplicate detector over one seed dataset, or an SLA that only counts while a browser tab is open, would demo beautifully and lie.
- Simulations are powerless on purpose — the workflow tester creates, sends and reserves nothing, and every note it writes begins with the word would.
- The doors are already built — the run log a real dispatcher will write through exists now, so history does not restart the day transport lands.
- You will be told, in writing, before you buy — each module page carries its own boundary, and we would rather lose a deal on it than win one and be found out in March.
Before you book the demo
What is a CMMS, and is Zenith one?
Who is it built for?
Is it genuinely bilingual?
Does it handle multiple sites?
Can we use our own terminology?
Does it do preventive and predictive maintenance?
Is there a mobile or field app?
How does it fit with what we already run?
Is it accessible?
What is not built yet?
How long does it take to get going?
Where are you based?
Bring the number your last system couldn't defend.
The compliance figure that changes depending on who ran it. The backlog that is forty-one in one report and thirty-eight in another. The bearing the system swears there are eleven of. Bring one of those and we will show you what it looks like when the answer arrives with its evidence attached — and what it looks like when there isn't any.
