Should I vibe code
CMMS for work orders, assets, preventive maintenance, and inspections
A preventive schedule that stops firing looks exactly like a month with no breakdowns. Right up until it doesn't.
?
Their verdict, the Starter price and the build-time estimate come from their entry, MIT-licensed. Checked 2026-08-04.
?
Our verdict, the regret score and everything below it. Editorial and unsponsored — nobody can pay to be moved.
The honest answer
why the verdict is what it is
A work-order tracker is a satisfying weekend. Assets, statuses, a board, a form a technician fills in on a phone — an agent will hand you all of it before dinner and it will look convincing. What a CMMS actually sells is the half you will not build: the scheduler that generates next month's preventive work whether or not anybody opens the app, and the record that proves an inspection happened. Both of them fail the same way, which is silently. A board with nothing on it looks like a quiet month rather than like a cron job that has been exiting early since the clocks changed, and nobody audits an empty queue. Meanwhile the technician you built this for is standing in a basement plant room with no signal, and the photograph of the cracked bearing that was going to be the evidence is sitting in a browser tab that will lose it on submit. None of this is difficult code. All of it is the difference between a maintenance app and a maintenance record.
What actually breaks
not "if". the specific failures.
- The preventive schedule, which is a recurrence rule and a cron job, and which fails to an empty queue rather than to an error — the same shape on screen as a month with nothing due
- Meter-based maintenance, where "every 500 running hours" depends on a reading somebody has to type, and a missing reading quietly means never
- Offline capture. Plant rooms, roof voids and basements have no signal, and a job completed with three photos in a dead zone is a form that loses all of it when the submit button finally resolves
- Attachments, which start as a couple of phone photos per job and become the largest and least backed-up thing you own by month four
- The audit trail, the first time a completed work order is edited in place — because the question is never what the record says now, it is what it said in March
- Asset hierarchy, since everybody starts with a flat list and everybody needs "this pump belongs to this air handler belongs to this building" by the second month
- Notifications to technicians who do not have accounts, do not read email, and will be given the job by text from a supervisor regardless of what your app believes
- Parts and stock, the feature nobody scopes and the reason the job could not actually be finished
The preventive-maintenance generator has run as a nightly job since March and has been failing since the last week of October, when the clocks went back and a naive local-time window comparison started skipping the day entirely. Nothing errors anywhere a person would see it. The job exits zero and writes nothing, and an empty board reads as a good month. It surfaces in January, when the insurer's surveyor asks for the quarterly service records on the wet riser and the fire dampers, and the only honest answer is that the system stopped asking for them in autumn. The work may well have been done — the same two engineers have done it for years. There is simply no record either way, and to a loss adjuster "we have no record" and "it was not done" are the same sentence.
Is that you?
the verdict is a default, not a law
- It is a shared list of jobs on equipment you own, and the real schedule lives somewhere a human actually looks
- Nothing in it is evidence — no statutory interval, no inspection anyone will ever ask you to produce
- You are the only person entering work, and losing the history would be irritating rather than expensive
- Every technician who needs it has signal and a laptop, not a phone in a basement
- The records are what you would hand to an insurer, a surveyor or a safety inspector
- Field staff are expected to complete jobs on a phone somewhere with no connectivity
- Your scheduler is the only thing that remembers a statutory service interval
- Two people need to see the same work order at once and know which of them has it
If you build it anyway
the checklist, then the prompt that enforces it
- Make the scheduler loud. It writes a heartbeat every run and alerts when it produces zero work orders two cycles running. Silence is the failure mode here, not an error page.
- Compute recurrences in UTC and materialise the next occurrence eagerly, so a missed run shows up as a visible gap rather than as nothing at all.
- Work-order history is append-only. Completions, sign-offs and meter readings are events; current state is derived from them. Editing a completed record in place destroys the one thing anybody will ever ask you for.
- Build the offline path before the dashboard. Capture to local storage first and sync second, and never let a submit button be the thing that decides whether a technician's photographs survived.
- Put files in object storage rather than the database, with a retention plan, on day one — not the week you run out of disk.
- Model the asset tree early. Retrofitting a parent relationship onto ten thousand flat asset rows is a weekend nobody enjoys.
- Export everything to CSV from the start: assets, work orders, completions, readings, and a manifest of attachments. It is what a migration into a real CMMS will ask for, and it is also what an audit will ask for.
I am building a maintenance system: assets, work orders, preventive schedules and inspections. The record is the product, not the board. Order the work accordingly and push back when I ask for the fun parts first. 1. Start with the preventive scheduler and its observability, before any UI. Every run writes a heartbeat row. If a run produces zero work orders twice in a row, that is an alert, not a quiet success. An empty board must never be indistinguishable from a broken cron job. 2. Compute all recurrences in UTC, store the timezone separately, and materialise the next occurrence as soon as one is completed. Write the test for the daylight-saving boundary before you write the rule engine. 3. Make work-order history append-only. Completions, sign-offs, readings and status changes are immutable events with actor and timestamp; the current state is a projection. Refuse to let me update a completed record in place, and explain that an insurer asks what the record said in March. 4. Build offline capture before any reporting. The mobile path writes to local storage first, uploads later, retries, and shows the technician clearly what is still unsynced. Photographs must survive a submit with no signal. 5. Attachments go to object storage with a size cap and a retention policy from the first commit. Never into the database. 6. Model assets as a tree from the start — site, system, asset, component — even if I say I only need a flat list. 7. Meter-based intervals need an explicit staleness rule: if no reading has arrived for longer than expected, raise that as a fault rather than letting the interval silently never elapse. 8. Give me CSV export of assets, work orders, completions and readings, plus an attachment manifest, before you build a single chart. 9. Out of scope, and say so rather than stubbing it: parts inventory, purchasing, technician scheduling and anything described as predictive. If I need those, tell me a real CMMS starts around 49 USD a month flat.
That one keeps you out of trouble. For the prompt that actually builds it, canivibecodeit.com has one.
their build prompt ↗Or don’t build it
the boring option, and the way back out
Almost immediately, and 49 dollars a month flat is roughly one hour of a maintenance engineer's time — that is the whole comparison. What it buys is a scheduler that somebody else is on call for, a mobile app that already survives a basement, and an audit trail that is append-only because a customer once needed it to be. The homemade version is genuinely good at the register: a list of what you own, where it is and when you bought it. Build that if you want. Do not let it become the thing that remembers a statutory interval.
$49/mo is cheaper than your weekend.
The exit is four CSVs and a folder: assets with their hierarchy, work orders, completion events with actor and timestamp, and meter readings, plus the attachments with a manifest mapping files to jobs. Every commercial CMMS imports approximately that shape, so keeping it clean is what makes leaving possible. The thing that makes leaving hard is the attachments — three photos per job for two years is a lot of storage nobody planned for, and it is the part of the record an auditor actually wants to look at.
Self-hosted CMMS with web and mobile clients covering work orders, assets and preventive maintenance, still actively developed.
Questions
The board really is easy. Why is the verdict YOUR FUNERAL rather than DEMO ONLY?
Because the failure lands on somebody who did not choose your code. A project board that goes stale annoys you. A maintenance system that stops generating preventive work does not annoy anybody at all — that is the problem. It produces exactly the same screen as a month with nothing due, and the people downstream are a technician who never got the job and whoever is relying on the equipment. The gap between demo and product here is not polish, it is whether silence is detectable.
What is the single most dangerous shortcut an agent will take?
Making work orders mutable rows. It is the obvious data model, an agent will produce it without comment, and it quietly deletes your history: when somebody edits a completed job to correct a date, the previous version is gone. Every question anybody ever asks a CMMS is a question about the past — what was done, by whom, when, against which interval — and a table of current state cannot answer any of them.
Could I just run this in Airtable or a spreadsheet?
For the asset register, honestly yes, and plenty of small facilities do exactly that. What you will not get is the scheduler with a heartbeat, offline capture with photographs, or an append-only completion history — and those are the three things that make it a maintenance record rather than a list. A spreadsheet is a much more honest version of the same shortcut, because nobody mistakes it for a system of record.
How much of this applies if it is just my own workshop?
Very little. One person tracking servicing on machines they own is squarely in the SHIP IT list at the top: nothing is evidence, nobody else depends on it, and the worst case is you rebuild it. The verdict describes the shape the product is sold in — several technicians, equipment somebody else uses, and inspection records that eventually get shown to a third party.
Every week, someone ships something they shouldn’t have.
New verdicts, the worst thing that landed in the trap, and the occasional incident report. No other email, ever.
Natural-language date parsing is the only hard bit, and it is a solved library.
A spreadsheet with types is easy. A spreadsheet with types that a team edits at once is not.
A personal task manager is the app every developer builds. Yours will fit your brain better.
last reviewed 2026-08-05 · verdict is editorial and unsponsored · shared entry data from canivibecodeit under MIT · not legal advice