@logeix/prose-check
v1.0.2
Published
Readability and AI-tell audit for local business web copy. Zero dependencies.
Maintainers
Readme
@logeix/prose-check
Readability and AI-tell audit for local business web copy. Zero dependencies.
npm i -g @logeix/prose-check
prose-check "dist/*-plumbers" --show 5Reads built HTML (visible <main> copy, chrome stripped) or Markdown.
| Metric | Why | | --- | --- | | Reading grade | Service copy should sit at 6–8; longer sentences, not vocabulary, are the usual cause of drift | | Mean / long sentence % | One idea per sentence | | Burstiness | Uniform sentence length reads as machine-written | | Em dash per 1k | Human range is roughly 4–10; flagged well above that, not banned | | Triplets per 200 words | Three-item lists with matched rhythm are a strong tell | | Contrast frames | "not just X, it's Y" and friends | | Unique % across files | Google treats near-identical city pages as doorway pages |
Duplication is compared within a content type, so a blog post is never measured against a landing page.
Shingles appearing on every page in a set are treated as shared components —
service cards, trust strips, CTA banners — and subtracted before the comparison.
Counting them makes any component-driven site look templated when it is not.
uniquePct describes the page-specific copy a writer controls; chromePct
reports how much of each page is furniture.
Options
--type <page|blog|gbp|meta> threshold profile (default: inferred from path)
--strict exit 1 when a threshold is breached
--show <n> list n worst sentences per file, with reasons
--no-dup skip cross-file duplication
--json machine-readable outputProfiles
| Type | Grade | Avg sentence | Unique | | --- | --- | --- | --- | | page | ≤7.5 | ≤17 | ≥60% | | blog | ≤8.5 | ≤20 | — | | gbp | ≤6.5 | ≤15 | — | | meta | ≤8 | ≤18 | — |
Pages under 120 words, and link lists or paginated indexes where sentence splitting is meaningless, are skipped rather than scored.
