What it is
A reference and fault finder for the twelve machines in my workshop — laser, 3D printer, CNC, lathe, bandsaw, drill press, soldering, multimeter, FPV quad, VEX robot, compressor, hot-wire cutter. 58 fault paths written symptom → cause → what to measure → fix, a six-step method, and a moderated stream where visitors add the fix that worked. If their machine isn't in the list they can add it themselves: the exact model, its own fault ladder, and photos of the machine and its rating plate.
Version history
Straight from the project’s own card data — what each version added.
Visitors can add machines that aren't listed — exact model, their own fault ladders, up to three photos (decoded, downscaled and stored in KV because R2 isn't on a card-free account), moderated in a second queue; machine list moved to an index key so a new page appears at once; restore for a machine deleted by mistake.
12 machines, 9 categories, 58 fault paths, 6-step method, moderated fixes with votes; feed and queue moved to single-key indexes so approvals appear instantly.
Files on the site
What broke, and what I’d change
Not written yet. This is the part only I can write — what actually went wrong, and what I’d do differently. It lives in builds/reflections/machines.md (see _TEMPLATE.md); as soon as that file has words in it, this section fills in on the next build.
Everything else on this page — the spec, the version history, the file counts — is generated from the project’s own build notes and files, so nothing here is guesswork.
Build spec
The project’s own build notes, rendered. Open the raw .md ↗
Show the spec
Workshop — machine library, fault finder, community fixes
Build a section of isaac1804.com at /machines: a reference for the machines in my workshop that explains how each one works, then helps diagnose it when it does not, and lets visitors add the fix that actually worked.
Content
- 12 machines: FDM 3D printer, diode laser cutter, CNC router, drill press,
- Each machine: chain of energy/information (input → output), mechanism steps,
- Fault finder entries are symptom (in the user's words) → most likely causes →
- A six-step diagnostic method page: stop, reproduce, narrow, measure, change one
bandsaw, wood lathe, soldering station, multimeter, FPV quad, VEX IQ robot, air compressor, hot-wire cutter.
subsystems that fail, safety lines, owner notes, and a fault finder.
what to measure → the fix. 58 entries total.
thing, write it down.
Behaviour
- Library with category filters and search over names, symptoms and subsystems.
- Machine page with the fault finder as accordions, owner notes, safety block,
- Visitors submit a fix from any fault card (anonymous). Submissions are held for
- Approved fixes show on that symptom and in the all-fixes stream, sortable by
and community fixes attached per symptom.
moderation. Isaac approves or rejects from a console behind a key, and can post directly as the owner.
newest or most helped; one vote per visitor per fix.
Technical
- Cloudflare Worker + KV on the same domain, route
isaac1804.com/machines/*, - Seed content compiled into the Worker (JS modules), never in KV, so a deploy
- Every visitor write is rate limited, deduplicated, honeypot-guarded, and
- Approved-tip and pending feeds are single JSON keys read with
get()so an
page and API on one origin. Vanilla HTML/CSS/JS, hash routing, no build step.
cannot erase it. KV holds approved tips, the pending queue and overrides only.
length-checked on the server.
approval is visible immediately instead of after the KV list cache expires.
Verify
Post → queue → approve → visible → vote → delete, all against production; then Playwright at 1440 / 768 / 390 checking console errors, 4xx, overflow and that the mobile nav is at the bottom of the viewport. Read the screenshots by eye.
V2 — machines that are not in the list
The seed catalogue is fixed at twelve. Visitors can add the rest:
- Form (
#/add): name, exact model, category, one-line description, optional energy path, - Model matters: the same machine with a different board or bearing fails differently, and the
- Photos: no R2 on this account. Client decodes to canvas, long edge 1400 px, JPEG q0.72,
- Moderation: a second queue (
i:pmachines) separate from fixes. Approve assigns a unique slug - Undo: deleting a built-in machine tombstones it;
POST /api/restore-machineputs it back and the
up to six faults (symptom / likely causes / what to check / the fix), up to three photos, optional name.
rating plate is the only reliable identifier in a photo.
steps down until the data URL fits ~600 KB. Server sniffs magic bytes (JPEG/PNG/WebP), 700 KB decoded cap, one img:<id> KV key each, served from /api/img/<id> as immutable, nosniff.
(-2, -3 on collision), writes m:<slug>, and updates i:machines so the library sees it at once. Reject deletes the image keys with the record. Owner submissions skip the queue.
admin Machines tab lists removals with a Restore button.