Fresh supermarket equipment technician - the asset ledger and PM-due tool: one card per machine, overdue turns red, every service visit leaves a trace
Build me a single-file HTML equipment ledger and PM-due tracker for
a fresh-food supermarket equipment technician. Opens by
double-click, works offline.
Background: the store runs a few dozen machines - coolers, walk-in
units, POS terminals, scales, label printers. Maintenance runs on
memory, so nobody can say when a given cooler was last charged.
When the contractor says "we did that last visit," I have nothing
to check it against. I need one card per machine, with due dates
that are visible.
Card fields:
- Name, internal ID, location (e.g. "fresh section, upright 3")
- Type: cooler / walk-in unit / POS / scale / other
- Purchase date, warranty end date
- Last service date, service interval (days)
- Owner, contractor name and phone
- Notes (chronic issues, wear-part model numbers)
Due-date logic:
- Next due = last service + interval; 7 or fewer days left turns
yellow, overdue turns red, otherwise green
- Warranty gets the same three colors (yellow inside six months,
gray after expiry - expired warranty is information, not an
alarm)
- Default view sorts by days remaining ascending: most urgent on
top, overdue pinned
- Summary strip up top: how many green / yellow / red; clicking
the red count filters to red
Service history (the core):
- Each card appends entries: date, what was done (parts /
refrigerant / deep defrost / routine inspection), cost, who did
it. One entry logged, the last-service date and next-due date
recompute automatically
- History shows newest first - this is the page I pull up when the
contractor claims a visit happened
Other requirements:
- Filter by location and type; search by name/ID
- Print view: a one-page list of yellow and red machines only
(machine, location, what's due, when it was last done) - one
sheet is all a store walk carries
- Data in localStorage, with JSON export/import: survives a new
laptop, a handover, or a cleared browser
- Empty-state onboarding on first open: how to create the first
card. No preloaded sample equipment
Hard constraints:
- Single file, no build step, no external CDN or fonts
- No accounts, no multi-store, no barcode scanning, no "automatic
push reminders" - a single HTML file cannot push; do not fake it
- No synthesized "equipment health score" - days-until-due is a
fact, a health score is invented, and the moment a fake number
appears, nobody believes any date on the ledger either
Why it is written this way
The three chronic failures of equipment care - service due and unknown, breakdown with no service history, disputes with outsourced maintenance - share one root cause: no ledger. A spreadsheet can hold the same data, but a spreadsheet doesn't recolor itself, so due dates depend on someone going to look. This tool's only added value is making due dates visible: three colors plus overdue-on-top puts the most urgent machines on the first screen, so opening it answers "who do I call today" in three seconds.
Service history linked to the due date is the closing of the loop: log a visit, the next due date slides forward automatically. Without that link the ledger dies within two weeks - people forget to log, due dates go stale, and a stale due date is worse than no ledger, because it carries the false authority of "the system says we're fine."
The print view carries only yellow and red because the use case allows one sheet of paper on a store walk; green machines on that sheet would push the urgent ones below the fold. The ledger tracks everything; the paper tracks today.
Banning the "health score" and sample data protects the tool's credit. A synthetic percentage adds nothing to a repair decision - the decision needs "upright 3 was last defrosted Sept 3," not "health 82." Fake scores and preloaded data fail the same way: once the user catches one invented number, every real number gets read with suspicion - and the only thing a ledger is worth is that every date in it is real.