Voice & tone
Measured from the site's own copy under src/content/. The voice the sitedeclares — tone, person, word choices, phrases it does not use — lives onAspects. This page is what the copy actually does, so the two can be held against each other.
Scoped corpus. Only blog, newsletter, guides and docs were measured — 4 of 13 collections under src/content/. The rest is not site prose. Text hardcoded into src/pages/ templates is always measured, whatever the scope.
What was measured
227 files, 162,619 words of body prose and 39,608 words of display copy across 4488 headings, taglines, captions, labels and alt strings.
| Read from | Files |
|---|---|
src/content/**/*.md — prose and frontmatter | 135 |
src/pages/**/*.astro — text hardcoded into a page | 92 |
The site's voice config is deliberately excluded. It holds the avoid list, so scanning it would make every site fail its own audit on the document that declares it.
Prose and display copy are measured apart, not averaged. Rhythm, register and vocabulary below run on body prose only — a caption is meant to be verbless, and scoring one for sentence rhythm reports a fault where there is a convention. Display copy gets its own section. The banned-phrase audit runs onboth: a phrase in a hero heading ships harder than one in a paragraph, because more people read it.
| Group | Docs | Words | Mean sentence | Variation | Diversity |
|---|---|---|---|---|---|
docs | 70 | 86,536 | 20.8 | 1.09 | 86.3 |
blog | 46 | 51,867 | 14.9 | 0.76 | 110 |
guides | 18 | 24,204 | 15.3 | 0.77 | 102.4 |
newsletter | 1 | 12 | 12 | 0 | — |
Groups are the top-level directories under src/content/. They are shown apart because they are usually written by different people to different rules, and one averaged number hides exactly the difference a style guide exists to settle.
Rhythm
The mean is the least useful number about rhythm — it describes copy where every sentence is the same length and copy that swings between four words and thirty. The distribution is the tone.
| Sentence length | Sentences |
|---|---|
| 0–4 words | 790 |
| 5–9 words | 1958 |
| 10–14 words | 1981 |
| 15–19 words | 1509 |
| 20–24 words | 1111 |
| 25–29 words | 701 |
| 30–34 words | 435 |
| 35–39 words | 229 |
| 40–44 words | 138 |
| 45–49 words | 86 |
| 50–54 words | 68 |
| 55–59 words | 46 |
| 60–64 words | 34 |
| 65–69 words | 29 |
| 70–74 words | 20 |
| 75–79 words | 14 |
| 80–84 words | 14 |
| 85–89 words | 14 |
| 90–94 words | 13 |
| 95–99 words | 5 |
| 100–104 words | 5 |
| 105–109 words | 5 |
| 110–114 words | 5 |
| 115–119 words | 4 |
| 120–124 words | 1 |
| 125–129 words | 2 |
| 130–134 words | 1 |
| 135–139 words | 2 |
| 145–149 words | 1 |
| 150–154 words | 1 |
| 160–164 words | 1 |
| 180–184 words | 1 |
| 200–204 words | 1 |
| 270–274 words | 1 |
| 590–594 words | 1 |
| 810–814 words | 1 |
Length variation
1
Above targettarget 0.4–0.7
Standard deviation 17.7 words over a mean of 17.6. This is the number that decides whether the copy has a pulse.
Under 0.4 the copy is metronomic; over 0.7 it reads restless. Corpus stylistics has no canonical band — this one is set from readable editorial prose.
How this is measured
Counts: How much sentence length differs across the copy.
Computed: Standard deviation of sentence length in words, divided by the mean (the coefficient of variation). Reported instead of the mean because a mean of 18 describes both copy where every sentence is 18 words and copy that runs 4, 31, 7, 30 — and those read nothing alike.
Limits: Scale-free by design, so it can be compared between sites. It says nothing about whether the long sentences are any good.
Alternation
12.9words
Mean difference between one sentence and the next. Variation says the lengths differ; this says they take turns rather than arriving in long blocks.
How this is measured
Counts: Whether long and short sentences take turns.
Computed: Mean absolute difference between each sentence and the one before it. Variation says the lengths differ; this says they interleave rather than arriving in one long block and then a short one.
Short sentences
30%
Under ten words. The short ones carry the emphasis — 12% run over thirty and carry the argument.
How this is measured
Counts: The share under ten words, and the share over thirty.
Computed: Sentences are split on terminal punctuation followed by a capital, re-joining known abbreviations, then counted in words.
Limits: A sentence with an unlisted abbreviation ("approx.", a middle initial) splits in two and counts as two short sentences.
Lexical diversity
95.1
MTLD — words before the vocabulary starts repeating. Around 50 is plain, 100 ordinary, 130 varied. Higher is not automatically better: a site is allowed to call the same thing the same word every time.
How this is measured
Counts: How many words the copy runs before it starts repeating vocabulary.
Computed: Tokens are walked until the running type-token ratio drops to 0.72, which closes one factor; the count is tokens divided by factors, averaged forwards and backwards. Roughly: 50 is plain, 100 ordinary, 130 varied.
Limits: Not scored below 50 tokens — there is not enough text for the number to mean anything. Higher is not automatically better: a site is allowed to call the same thing the same word every time, and should.
Person & stance
Halliday's interpersonal metafunction, counted: who is speaking, to whom, and how much room the sentence leaves for disagreement.
| Person | Uses | Per 10,000 words |
|---|---|---|
| We — the firm | 39 | 2.4 |
| You — the readerdominant | 3792 | 233.2 |
| They — the client, the brand | 822 | 50.5 |
| I — one person | 193 | 11.9 |
We per you
0
Within targettarget 2 or fewer
The site says "we" 0 times for every "you".
Above two, the copy is addressed to a mirror. The most reliable single diagnostic on this page.
How this is measured
Counts: First-person-plural pronouns divided by second-person pronouns.
Computed: A ratio of the two counts above. Null rather than infinity when the copy never addresses the reader, because "infinitely self-regarding" is a joke and not a measurement.
Limits: On a case study the client is legitimately the subject, so a high ratio is evidence to read rather than a fault to fix.
Boosters
3.7per 10k
Within targettarget 30 or fewer
Intensifiers and superlatives — very, iconic, world-class. Appraisal calls this graduation: turning the volume up without adding evidence.
Intensifiers assert force without adding evidence, and a reader discounts them because they are free to write. Thirty per 10,000 words is roughly one every three paragraphs.
How this is measured
Counts: Intensifiers and superlatives — very, iconic, world-class, award-winning.
Computed: A count of the booster list per 10,000 words. Appraisal calls this graduation: raising the force of a claim without adding anything a reader can check.
Limits: A fixed list, so it undercounts. It also cannot tell a quoted booster from an asserted one.
Hedges
24.8per 10k
Words that widen a claim so it cannot be wrong. A little reads honest, a lot reads evasive. Reported, not targeted — the line is a house decision.
How this is measured
Counts: Words that widen a claim so it cannot be wrong — arguably, tends, generally.
Computed: A count of the hedge list per 10,000 words. Reported and not targeted: a little hedging reads honest, a lot reads evasive, and where the line falls is a house decision rather than a fact.
Declarative
98%
175 questions and 229 imperatives in 9228 sentences. A page that never asks and never instructs is telling, not talking.
How this is measured
Counts: Statements, questions and commands.
Computed: Terminal punctuation decides questions and exclamations; a sentence opening with a bare verb from a short list counts as an imperative; everything else is declarative.
Limits: The imperative list is deliberately short and excludes verbs that are also nouns, so "Design without direction is decoration" is not read as a command. It therefore undercounts.
Modality — how much room a claim leaves for disagreement: 487 high (must, will, never), 913 median (should, can), 121 low (may, might, could), across 9228 sentences. Almost none of either is a stance too — bald assertion.
Boosters in use: really ×13, very ×10, unique ×10, leading ×6, deeply ×5, powerful ×5, completely ×4, absolutely ×3, highly ×2, extremely ×1, incredibly ×1
Register
The machinery behind "this reads corporate". Each of these is countable, which is the reason to count them: "less corporate" is unactionable, "fourteen fewer nominalizations" is not.
Nominalization
157.8per 10k
Within targettarget 250 or fewer
Verbs wearing noun costumes — creation, development, implementation. Each one loses the person who did it.
Deverbal nouns hide the actor: "the naming process was undertaken" against "we named it". Williams, Style, chapter 3.
How this is measured
Counts: Verbs turned into nouns — creation, development, implementation.
Computed: Words ending -tion, -sion, -ment, -ance, -ence or -ism, per 10,000 words, minus a named list of lexicalised exceptions. Each one loses the person who did the thing: "we named it" against "the naming was undertaken".
Limits: The exceptions list is by name, so an unlisted ordinary noun ("regiment", "torrent") would count as corporate prose. Add it to the list rather than living with the false positive.
Passive voice
10% of sentences
Within targettarget 20 or fewer
Detected by pattern, not by a tagger, so read it as an estimate. Passive is correct whenever the actor is unknown or beside the point.
A share of sentences, not a ban. Passive voice is correct whenever the actor is unknown or beside the point.
How this is measured
Counts: The share of sentences containing a passive construction.
Computed: A form of "be" or "get", optionally an adverb, then a participle — either regular (-ed, -en) or one from a list of irregulars.
Limits: A heuristic, not a parse. It misses a prefixed irregular participle ("was redrawn", because the list holds "drawn"), and counts "is interested" as passive. Read it as an estimate. It is also not a fault to minimise: the passive is correct whenever the actor is unknown or beside the point.
Relational clauses
40% of sentences
Sentences built on is / are / has — classifying rather than narrating. High density reads static: a list of what things are, with nothing happening.
How this is measured
Counts: Sentences built on is, are, has — classifying rather than narrating.
Computed: A sentence counts as relational if it contains any copular or possessive verb. High density reads static: a list of what things are, with nothing happening. It is the grammar of an "about us" page.
Limits: Detected by verb list, so a sentence with both a copula and an action verb counts as relational. The four process types overlap by construction and do not sum to the sentence count.
Sentences with a number
10%
Below targettarget 15 or more
935 of 9228. The share of the copy that can be checked rather than believed.
The share of sentences carrying a number. Set high on purpose: a case study that never counts anything is a description, not a result.
How this is measured
Counts: The share of sentences a reader could check rather than believe.
Computed: Any sentence containing a digit. Deliberately crude: the question is whether the copy counts anything at all, and a page that never does is a description rather than a result.
Limits: A year counts, and a year is not an outcome. Read the share as a floor on how much evidence is present, never as a ceiling.
Also: 1956 contractions (120.3 per 10k — the informality dial), and 165 sentences opening with a conjunction (2%). The schoolroom rule againstAnd and But in first position is not an English rule; whether this site uses them is a decision, and this is the number that shows whether it made one.
Most frequent: conversation ×176, instruction ×141, notification ×125, connection ×93, permission ×85, integration ×76, isolation ×75, formation ×70, sequence ×62, decision ×60
Display copy
Headings, taglines, captions, button labels and alt text — 39,608 words across 4488 strings. More of the site by volume than its prose, and the part a reader is most likely to actually read.
Mean length
8.8words
Short by nature. The question for display copy is not rhythm but whether it repeats itself and whether it reaches for an intensifier when it has only a few words to spend.
How this is measured
Counts: How long the average heading, tagline, caption or label runs.
Computed: Words divided by strings, across every readable string in the corpus. Measured apart from prose rather than averaged into it: a caption is a different register from a paragraph, and scoring one for sentence rhythm reports a fault where there is a convention.
Repeated verbatim
15%
Within targettarget 15 or fewer
The share of strings that appear more than once, identically, somewhere on the site.
A repeated caption is a caption that was not written for its image. Some repetition is honest — the same product shot in four studies — but a high share means the copy is filling a slot rather than saying something.
How this is measured
Counts: The share of strings that appear more than once, identically.
Computed: Strings are lowercased and counted; every string belonging to a group of two or more counts as repeated. A repeated caption is a caption that was not written for its image.
Limits: Exact matches only, so two captions differing by one word both read as unique. Some repetition is honest — the same product shot appearing in four studies — so read a high share as a prompt to look, not as a fault.
Verbless
31%
Labels rather than statements. Reported, not targeted: a caption is allowed to be a noun phrase, and a site that captions in full sentences is making a different, equally valid choice.
How this is measured
Counts: The share of strings with no finite verb — labels rather than statements.
Computed: A string counts as verbless if it contains no form of be or have, no modal, and no word ending -ed or -s. Reported and not targeted: a caption is allowed to be a noun phrase, and a site that captions in full sentences is making a different, equally valid choice.
Limits: A regex, not a parse. A caption whose only verb is irregular ("Bottles made in Portland") reads as verbless, and a plural noun ("Bottles") reads as a verb.
Boosters
3.8per 10k
Within targettarget 30 or fewer
Intensifiers in display copy, where there is least room to justify one. This is where 'iconic' and 'award-winning' usually live.
Intensifiers assert force without adding evidence, and a reader discounts them because they are free to write. Thirty per 10,000 words is roughly one every three paragraphs.
How this is measured
Counts: Intensifiers and superlatives — very, iconic, world-class, award-winning.
Computed: A count of the booster list per 10,000 words. Appraisal calls this graduation: raising the force of a claim without adding anything a reader can check.
Limits: A fixed list, so it undercounts. It also cannot tell a quoted booster from an asserted one.
Most repeated strings:
the
×18may 16, 2026
×10copy
×9get crystl
×9crystl quest
×8crystl cli
×8
Distinctive vocabulary
Not a frequency list. The top of a frequency list is the, of, and for every text ever written. This is keyness: words the copy uses far more than English does, scored by log-likelihood against a general-English reference. Brand names are dropped — a table led by the client's own name has answered its own question.
| Word | Uses | Docs | Times commoner than English |
|---|---|---|---|
claude | 1110 | 108 | 1184× |
agent | 1344 | 122 | 128× |
agents | 898 | 113 | 155× |
gem | 594 | 64 | 495× |
quest | 516 | 48 | 170× |
terminal | 458 | 83 | 138× |
code | 636 | 107 | 33× |
session | 481 | 97 | 56× |
branch | 426 | 62 | 69× |
directory | 299 | 72 | 217× |
file | 419 | 92 | 46× |
files | 367 | 83 | 78× |
settings | 325 | 67 | 118× |
project | 504 | 93 | 19× |
sessions | 326 | 85 | 66× |
api | 238 | 64 | 307× |
each | 626 | 119 | 8× |
model | 428 | 67 | 20× |
isolated | 274 | 68 | 97× |
merge | 213 | 49 | 232× |
remote | 275 | 44 | 66× |
context | 292 | 74 | 42× |
gems | 202 | 51 | 221× |
command | 283 | 80 | 35× |
Read the top of this list as the site's actual subject. If a word belongs there and is missing, the copy is not about what the site thinks it is about. Words appearing in fewer than three documents are excluded, so what survives is habit rather than one page's topic.
Against the declared voice
The site declares a concrete, energetic, plain-spoken, playfully confident voice, written in the second person — you, your. The copy's dominant person is the second person — you, your. The two agree.
Not automatically a fault. A case study is about the client, so third person dominating is expected; what matters is whether the firm appears at all when it should, and whether the reader is ever addressed.
Phrases the site says it does not use
2 of 7 appear in copy that ships, counting headings, taglines and captions as well as prose. This is the list going stale in the right direction — fix the copy and the rows disappear.
| Phrase | Uses | Where |
|---|---|---|
seamless | 1 | CLAUDE.md File: What It Is and How to Write One |
delve | 1 | CLAUDE.md File: What It Is and How to Write One |
The rules this sets
Measurement is only half of it. These are the targets the numbers above are judged against, stated so a writer can act on them without reading a table. They are house style — set them where this site needs them, not where a textbook does.
- Vary the sentence length deliberately. Keep variation between 0.4 and 0.7. The cheapest fix for flat copy is to cut one sentence in four down to under ten words.
- Address the reader more than the firm. No more than twowes per you. Currently 0.
- Earn force with evidence, not intensifiers. Under 30 boosters per 10,000 words. Delete the adjective and put a number in its place.
- Keep the actor in the sentence. Under 250 nominalizations per 10,000 words and under 20% passive. We named it, notthe naming was undertaken.
- Count something. At least 15% of sentences should carry a number. Currently 10%.
- Say the same thing the same way. The word choices on Aspects are settled once so they are not re-argued per page.
Method
Every number above has an entry here, and the page cannot show a number without one. A voice report is an argument about somebody's writing: an unexplained number in one is worse than no number, because it looks like a fact, cannot be checked, and leaves the writer no way to disagree except by ignoring the page.
Where a measure is a heuristic it says so, and says where it is known to be wrong. A part-of-speech tagger would do better on clause types and passives; the kit does not ship one, and an approximate number with its method stated is worth more to a writer than no number at all. The word lists live in src/lib/voice-lexicons.ts, the maths insrc/lib/voice-metrics.ts, and this catalogue insrc/lib/voice-method.ts — all three are meant to be edited.
| Measure | What it counts | How | Source |
|---|---|---|---|
| Length variation | How much sentence length differs across the copy. | Standard deviation of sentence length in words, divided by the mean (the coefficient of variation). Reported instead of the mean because a mean of 18 describes both copy where every sentence is 18 words and copy that runs 4, 31, 7, 30 — and those read nothing alike. LimitsScale-free by design, so it can be compared between sites. It says nothing about whether the long sentences are any good. | House style |
| Alternation | Whether long and short sentences take turns. | Mean absolute difference between each sentence and the one before it. Variation says the lengths differ; this says they interleave rather than arriving in one long block and then a short one. | House style |
| Short and long sentences | The share under ten words, and the share over thirty. | Sentences are split on terminal punctuation followed by a capital, re-joining known abbreviations, then counted in words. LimitsA sentence with an unlisted abbreviation ("approx.", a middle initial) splits in two and counts as two short sentences. | House style |
| Lexical diversity (MTLD) | How many words the copy runs before it starts repeating vocabulary. | Tokens are walked until the running type-token ratio drops to 0.72, which closes one factor; the count is tokens divided by factors, averaged forwards and backwards. Roughly: 50 is plain, 100 ordinary, 130 varied. LimitsNot scored below 50 tokens — there is not enough text for the number to mean anything. Higher is not automatically better: a site is allowed to call the same thing the same word every time, and should. | McCarthy & Jarvis |
| Person | Pronouns, grouped into first plural, first singular, second and third. | A direct count of each group’s pronoun list against the tokenized prose, reported per 10,000 words so documents of different lengths compare. Limits"We" is counted wherever it appears, including inside a client quotation. A tagger would not help; only a human reading the sentence would. | Halliday & Matthiessen |
| We per you | First-person-plural pronouns divided by second-person pronouns. | A ratio of the two counts above. Null rather than infinity when the copy never addresses the reader, because "infinitely self-regarding" is a joke and not a measurement. LimitsOn a case study the client is legitimately the subject, so a high ratio is evidence to read rather than a fault to fix. | Martin & White |
| Boosters | Intensifiers and superlatives — very, iconic, world-class, award-winning. | A count of the booster list per 10,000 words. Appraisal calls this graduation: raising the force of a claim without adding anything a reader can check. LimitsA fixed list, so it undercounts. It also cannot tell a quoted booster from an asserted one. | Martin & White |
| Hedges | Words that widen a claim so it cannot be wrong — arguably, tends, generally. | A count of the hedge list per 10,000 words. Reported and not targeted: a little hedging reads honest, a lot reads evasive, and where the line falls is a house decision rather than a fact. | Martin & White |
| Modality | How much room a claim leaves for disagreement — must and never against may and might. | Modal verbs counted in three strengths. High closes the question, low holds it open, and copy with almost none of either is making bald assertions, which is a stance too. | Halliday & Matthiessen |
| Mood | Statements, questions and commands. | Terminal punctuation decides questions and exclamations; a sentence opening with a bare verb from a short list counts as an imperative; everything else is declarative. LimitsThe imperative list is deliberately short and excludes verbs that are also nouns, so "Design without direction is decoration" is not read as a command. It therefore undercounts. | Halliday & Matthiessen |
| Nominalization | Verbs turned into nouns — creation, development, implementation. | Words ending -tion, -sion, -ment, -ance, -ence or -ism, per 10,000 words, minus a named list of lexicalised exceptions. Each one loses the person who did the thing: "we named it" against "the naming was undertaken". LimitsThe exceptions list is by name, so an unlisted ordinary noun ("regiment", "torrent") would count as corporate prose. Add it to the list rather than living with the false positive. | Williams |
| Passive voice | The share of sentences containing a passive construction. | A form of "be" or "get", optionally an adverb, then a participle — either regular (-ed, -en) or one from a list of irregulars. LimitsA heuristic, not a parse. It misses a prefixed irregular participle ("was redrawn", because the list holds "drawn"), and counts "is interested" as passive. Read it as an estimate. It is also not a fault to minimise: the passive is correct whenever the actor is unknown or beside the point. | Williams |
| Relational clauses | Sentences built on is, are, has — classifying rather than narrating. | A sentence counts as relational if it contains any copular or possessive verb. High density reads static: a list of what things are, with nothing happening. It is the grammar of an "about us" page. LimitsDetected by verb list, so a sentence with both a copula and an action verb counts as relational. The four process types overlap by construction and do not sum to the sentence count. | Halliday & Matthiessen |
| Sentences with a number | The share of sentences a reader could check rather than believe. | Any sentence containing a digit. Deliberately crude: the question is whether the copy counts anything at all, and a page that never does is a description rather than a result. LimitsA year counts, and a year is not an outcome. Read the share as a floor on how much evidence is present, never as a ceiling. | House style |
| Contractions | The informality dial — don’t, it’s, we’ve. | Contracted verb forms per 10,000 words. Bare ’s is ambiguous, so the hosts that genuinely contract a verb are named and possessives ("Miller’s bottle") are excluded. | House style |
| Conjunction openers | Sentences beginning with And, But, So. | First token of each sentence, matched against the coordinating conjunctions. The schoolroom rule against them is not an English rule; the number shows whether the site made a decision or never noticed. | House style |
| Keyness | Words the copy uses far more often than English does. | Log-likelihood G² = 2·O·ln(O/E), where E is the word’s general-English rate times the corpus size. Filtered to words at least four times commoner than English (log-ratio ≥ 2), appearing four times or more, in at least three documents. LimitsWords absent from the reference list are dropped, not scored. They are nearly always brand names, and a table led by the client’s own name has answered its own question. The reference is a general-English blend, so a specialist site will look distinctive simply for being about its subject. | Dunning |
| The reference corpus | What "commoner than English" is measured against. | Unigram frequencies for the 17,626 commonest English words, in occurrences per million, from the wordfreq model — subtitles, news, books, web text and Wikipedia blended. LimitsGeneral English, not a genre-matched corpus. Comparing marketing copy against a genre-matched reference would be sharper and needs a corpus the kit does not ship. | wordfreq |
| Display copy length | How long the average heading, tagline, caption or label runs. | Words divided by strings, across every readable string in the corpus. Measured apart from prose rather than averaged into it: a caption is a different register from a paragraph, and scoring one for sentence rhythm reports a fault where there is a convention. | House style |
| Repeated display copy | The share of strings that appear more than once, identically. | Strings are lowercased and counted; every string belonging to a group of two or more counts as repeated. A repeated caption is a caption that was not written for its image. LimitsExact matches only, so two captions differing by one word both read as unique. Some repetition is honest — the same product shot appearing in four studies — so read a high share as a prompt to look, not as a fault. | House style |
| Verbless display copy | The share of strings with no finite verb — labels rather than statements. | A string counts as verbless if it contains no form of be or have, no modal, and no word ending -ed or -s. Reported and not targeted: a caption is allowed to be a noun phrase, and a site that captions in full sentences is making a different, equally valid choice. LimitsA regex, not a parse. A caption whose only verb is irregular ("Bottles made in Portland") reads as verbless, and a plural noun ("Bottles") reads as a verb. | House style |
| Distinctive AI phrases | Phrases almost nobody writes on purpose — "here’s the kicker", "unlock the power of", "in today’s fast-paced world". | Each of the catalogue’s ban-tier patterns matched case-insensitively across prose and display copy. Counted flat: one hit is a hit, and the table shows what it matched so the reader can judge it rather than take the count on trust. LimitsA hit is not evidence of anything. People write these too, and a handful across a whole site is a handful. The examples are shown for exactly this reason. | AI-tells catalog |
| Overused ordinary English | Phrases that are normal English but 22x-182x commoner in machine-written text. | A density budget, not a ban: at most one hit per 400 words. Reported as words-per-hit against that budget. Position matters too — the catalogue counts a hit in a headline, an H1 or a CTA as over budget regardless of document length, so display-copy hits are counted separately. LimitsChasing these to zero is the wrong outcome. Every one is a sentence a human writes sometimes, and a writer avoiding them all produces stilted prose, which is its own tell. Over budget means look, not delete. | AI-tells catalog |
| Sentence shapes | Constructions rather than phrases: "not just X, it’s Y", rule-of-three cadence, stacked hedging, em-dash density, conjunctive-adverb openers, empty lead-ins. | Each shape matched by its own pattern over the prose, reported per 10,000 words against a budget. Shapes are measured because they survive paraphrase: a writer told to stop saying "not just X, it’s Y" writes "this isn’t merely X — it is Y", which a phrase list misses and the shape catches. LimitsThe rule-of-three pattern is narrowed to three lowercase single words closing a sentence, because matching every "X, Y and Z" caught ordinary lists of services. It undercounts on purpose — for a number that gets read as an accusation, that is the right direction to be wrong in. | AI-tells catalog |
| Tells in display copy | Hits from either tier that landed in a heading, tagline, caption or button label rather than in a paragraph. | Every match is attributed to the field it came from as it is found, and display-copy matches are totalled across both tiers. Position is part of the measure rather than a refinement of it: the catalogue counts a hit in a headline, an H1 or a CTA as over budget regardless of how long the document is. LimitsIt counts where a phrase sits, not how prominent that position actually is on the rendered page. A caption on the twelfth image and an H1 both count as display copy. | AI-tells catalog |
| Banned phrases | The site’s own avoid list, run over the site’s own copy. | Each phrase matched case-insensitively on whole words, across prose and display copy together. A trailing YAML comment is stripped, and an entry written as a pattern ("it’s not just X, it’s Y") is skipped rather than matched literally. LimitsThe site’s voice config is excluded from the corpus, or the avoid list would match itself once per entry. Only literal phrases are checked: a banned idea rephrased passes. | House style |
References
- House style
This kit. Not a finding from the literature.
A band somebody chose. Every target on the page carries the reason it sits where it does, and a site doing a different job should move it rather than fail against it.
- McCarthy & Jarvis
Philip M. McCarthy and Scott Jarvis, "MTLD, vocd-D, and HD-D: A validation study of sophisticated approaches to lexical diversity assessment", Behavior Research Methods 42(2), 2010, 381–392.
Why MTLD is used here instead of type-token ratio, which falls as a text gets longer and so compares texts by their length.
- Halliday & Matthiessen
M. A. K. Halliday and Christian Matthiessen, An Introduction to Functional Grammar, 4th ed., Routledge, 2014.
Systemic functional linguistics. The source of the ideational (process types) and interpersonal (person, mood, modality) metafunctions.
- Martin & White
J. R. Martin and P. R. R. White, The Language of Evaluation: Appraisal in English, Palgrave Macmillan, 2005.
Appraisal theory. Graduation covers boosters and hedges; engagement covers how much room a claim leaves for disagreement.
- Williams
Joseph M. Williams, Style: Lessons in Clarity and Grace, 12th ed., Pearson, 2016.
The standard treatment of nominalization and of when the passive is the right choice.
- Dunning
Ted Dunning, "Accurate Methods for the Statistics of Surprise and Coincidence", Computational Linguistics 19(1), 1993, 61–74.
Log-likelihood (G²) for comparing a corpus against a reference. The standard keyness statistic in corpus linguistics.
- wordfreq
Robyn Speer, wordfreq: a library for looking up the frequencies of words, v3, 2022. doi:10.5281/zenodo.7199437
The general-English reference frequencies keyness is scored against — a blend of subtitles, news, books, web text and Wikipedia. See src/data/README.md.
- AI-tells catalog
The scrub-ai-tells catalog, ported to src/lib/ai-tells-catalog.ts. Its corpus-frequency tier cites a frequency study comparing AI-written and human-written corpora, in which each listed phrase is 22x-182x commoner in machine text.
A curated pattern bank, grown by hand as somebody notices a new tell. Not a trained classifier and not a detector: it cannot tell you who wrote something, and every pattern in it appears in prose written by people.