Overview
Voice on this site is neutral playbook. The reader (human or agent) wants the rule; rationale earns its place after the rule is on the page. This is the short-form voice spec. For specific constructions to avoid, see anti-slop.
Lead with the rule
Open every section, every paragraph, and most sentences with the rule itself.
- “Use Postgres for app data.” Not “Postgres is generally considered a good choice for app data.”
- “Avoid
@apply.” Not “Many developers find@applyproblematic in certain cases.”
Once the rule is on the page, give the rationale in the next clause or sentence.
Name the thing
Specific nouns. Specific versions.
- “Postgres 17,” not “modern relational databases.”
- “Cloudflare Workers,” not “edge functions.”
- “
pg_dump --jobs=4,” not “Postgres’s parallel backup tool.”
If a sentence still reads when you remove a category word (“solution,” “approach,” “technology”), delete it.
State the rationale once
A rule’s rationale lives in its first appearance. Do not restate it three sections later. If a downstream rule depends on the same reasoning, link back: “See the rationale in postgres.”
Vary rhythm
A page of identical-length sentences sounds like a model. Mix lengths.
- Do not follow a long sentence with another long sentence.
- Do not stack three short sentences unless the staccato is doing real work.
- Read a paragraph aloud. If you run out of breath, cut it.
Confidence over hedges
Pick a side. Hedge only when the rule genuinely has exceptions, and name those exceptions.
- “Use SQLite for single-writer workloads.” Not “SQLite might be a reasonable choice in some cases.”
- “Prefer Postgres over MySQL.” Not “Both Postgres and MySQL have their merits.”
A page that hedges every claim is unusable.
Examples carry the weight
When a rule is non-obvious, show code or a before-and-after pair.
// Bad
const x = items.filter((i) => i.active).map((i) => i.id)
// Better
const activeIds = items.filter((i) => i.active).map((i) => i.id)See anti-slop for the rewrite pattern applied to prose.
Forbidden vocabulary
A short list. The full list lives in anti-slop.
- No
"delve,""dive in,""navigate the landscape of,""unlock." - No
"leverage"as a verb. - No
"robust solutions,""comprehensive guide,""seamless experience." - No em-dashes for parenthetical asides.
Tone register
Direct, not curt. Confident, not boastful. Helpful, not chummy.
- Prefer the imperative (“Use,” “Avoid”) when the rule applies to anyone touching the codebase.
- Use “you” when addressing the reader’s specific decision (“If you are on Vercel, set the framework preset to Astro”).
- Avoid “we” unless writing co-authored material.