01

What It Was

A vibration analysis web app for industrial machinery.

An analyst uploads vibration data from a machine and gets a professional fault report: severity zone, identified faults with the frequency evidence, and recommendations. Sold to vibration analysts as a tool.

02

How It Worked

A deterministic Python analysis core computes every finding: numpy/scipy DSP, ISO 20816 severity zones, bearing defect frequency matching.

A language model drafts the narrative text only. Consistency contracts verify every claim in the narrative against the computed findings before the report ships.

FASTAPI + POSTGRESQL · GOOGLE SIGN-IN · STRIPE CREDIT PACKS · WEASYPRINT PDF · DIGITALOCEAN DROPLET

DETERMINISTIC PATH UPLOAD FORMAT DETECT .TXT / .DAT / .ASC DSP CORE NUMPY / SCIPY FINDINGS ISO 20816 ZONES GENERATED TEXT LLM DRAFTS NARRATIVE CONSISTENCY CONTRACTS VERIFY EVERY CLAIM PDF REPORT WEASYPRINT
FIGURE 01 · THE MODEL NEVER COMPUTES A FINDING. IT ONLY WRITES ONE UP, AND THE CONTRACTS CHECK THAT WRITE-UP AGAINST THE NUMBERS.
03

What The Engine Matches

Severity is classified against ISO 20816 zones. Faults are identified by matching bearing defect frequencies against the spectrum, which means separating tones that are synchronous with running speed from tones that are not.

1X RUNNING SPEED BEARING TONE BEARING TONE 2X 3X 4X 5X NOISE FLOOR
FIGURE 02 · THE TRACE FROM THE FRONT PAGE, ANNOTATED. SYNCHRONOUS HARMONICS VERSUS NON-SYNCHRONOUS BEARING TONES.
04

Engineering Receipts

05

Three Bugs And A Rule

The renderer segfault

Symptom
WeasyPrint segfaulted when run under threads.
First fix
A lock. It proved insufficient.
Real fix
Subprocess isolation.

The privacy defect

Symptom
Uploaded raw data could still be on disk for a moment after the API reported an error.
Fix
Purge order corrected, so deletion completes before the wire answers.

Three silent-wrong bugs

Class
Bugs that return a plausible number instead of failing loudly.
Instances
A UTF-16 encoding RMS miscalculation. European decimal-comma parsing. An amplitude ceiling overflow.
Outcome
All three caught before a customer saw a wrong number.

The protected core

Rule
The analysis engine directory was write-locked for AI coding agents and opened per file by hand.
Verification
Every change checked by diff and test count, not the agent's summary.
06

Why It Died

Nobody who tried it used it a second time.

I spent five months building and twelve days asking. When four independent sources told me the same thing in one weekend, I shut it down that night.

07

What I Took From It

Talk to the person who signs the cheque before anything exists. Money is the only validation. A build budget should be funded by revenue.

Next case study: Khaings International PdM pilot