Style scorer
The claim
My nine writing checks picked the version readers preferred in 50% of pairs.
Why I built it
Every page on this site follows one writing guide. I wanted to know whether the part a program can check measures anything readers care about. A paid model judge can also check writing, so I wanted the free rules and the paid judge measured on the same texts.
You can paste your own writing into the scorer and see each break marked in place. Nothing leaves your browser.
The nearest existing tool is vale-ai-tells, a rule set for the Vale prose linter. It publishes no agreement numbers.
What I built
Each rule is one TypeScript function that returns the exact characters that broke it. The same code runs in the browser, the tests and the eval.
For human judgement I used LAMP, a public dataset from Salesforce researchers. Professional writers edited model-written fiction, and readers ranked three versions of each paragraph. A script downloads it at a pinned version and checks every file’s hash. None of its text is in my repo.
AI coding agents (Claude Code) wrote the code under my direction.
Decisions
I froze the rules before computing any number. Tuning them on the dataset would have made every agreement figure meaningless.
The score is findings per 100 words, not a count. A separate baseline, “prefer the shorter version”, shows how much length alone explains. It reached 62%.
How I tested it
The project has 124 automated tests. A script breaks 39 parts of the code on purpose, and the tests catch every one.
Findings landed on words the writers edited no more often than chance. Stock phrases were the exception. 18% of them landed on edits the writers tagged as clichés, against 11% by chance.
Writers cut stock phrases by more than half. They added em dashes and long sentences, which my rules ban. My guide is for plain explanation, and the only public labels that fit are on fiction.
What broke
The dataset’s main file does not parse, because of one missing comma. I used its train-test split file instead.
The deliberate breaks found two gaps. One rule carried a check no test could see. Nothing tested a finding that sat next to an edit without touching it.
What next
The Claude judge is built and tested against a fake model. It has not been run yet, so no number in this piece comes from it. I will also label my own writing, the kind of text the rules were written for.