Design system  /  Identity  /  Voice

SMB-direct. Concrete. Short.

Subject = a person, not a system. Verb = action, not existence. One claim per sentence. Under 16 words.

Where these rules live

This page is the human-readable mirror. The canonical source is the writing skill in the hydra repository, at .claude/skills/writing/. Everything on this page is generated from the same rules an agent loads before it writes a word: references/voice.md for the rules below, references/ai-tells.md for the sweep, references/personas.md for who is speaking, references/moves.md for the editorial moves.

Both carry a version marker. If they disagree, the skill wins, and the drift is a bug worth a pull request. A rule that only one of the two executes is not a rule.

VOICE-VERSION: 2.0.0

Rule zero · close on an action

Every piece ends with what the reader does next. Not with a summary of what they just read. This is the most-broken rule we have, on every surface we ship.

A blog closes on something the reader can start Monday. A tutorial closes on the next tutorial. A documentation page closes on the next task. A product page closes on the CTA pair. A walkthrough step closes on the thing to click.

The test: delete your last paragraph. Did the reader lose an instruction, or a recap? If it was a recap, the paragraph was a bow. Cut it and write the instruction instead.

Cynicism without direction doesn't count. The piece always ends in "you can and should fix this".

Three registers · which one we use, and the two we don't
Register A · the procurement voice

"The Solution supports the saving of search queries."

Depersonalised, legally safe, built for tender documents. Subject is always "the Solution", never a person. Reads like a specification, not a product.

"The Solution offers the capability to centrally configure templates including corporate identity."
"The Solution shall be reachable via a fully qualified domain name."
Use it? No. Reserved for documentation and detailed feature lists on app-detail pages.
Register B · the requirements voice

"The system must store all withdrawals."

Functional requirements, imperative, testable. Subject is "the system". One step deeper into robot territory than register A, and twice as anonymous.

"The system must maintain an audit trail of all cost allocations."
"The system must register the dependency relation between charge orders and collection decisions."
Use it? No. Focuses on what the system does, not on what the user achieves.
Register C · the user-story voice

"As a user I want to save my searches, so I can use them again later."

A real person, a concrete goal, a motivation. With one tweak, drop "As a user", and it lands exactly on the Conduction tone.

"As a user I want to filter content, so only relevant content is available to me."
"As a user I want to assign tickets, so I can hand off cleanly to a colleague."
Use it? Yes, but rewrite shorter. Address the reader directly. See recipes below.
Rewrite recipes · from source to website
Tender / requirement sourceConduction website
"The Solution supports the saving of search queries." "Save your searches and use them again later."
"The Solution has one central admin environment in which authorisations can be managed." "Manage all authorisations in one place."
"The Solution supports Single Sign On (SSO) authentication based on ADFS and SAML 2.0." "Log in with your existing account via SSO (ADFS, SAML 2.0)."
"The system must provide a digital intake facility through which requests can be submitted." "Let people sign up digitally, no paperwork."
"The system must permanently archive historical annual accounts." "Annual accounts are archived automatically, findable forever."
"The Solution offers document-creation functionality to create documents and emails from templates." "Generate documents and emails from templates, instantly, no plug-in."
"State-of-the-art platform that accelerates digital transformation." "Twelve apps that run on your Nextcloud in two minutes."
"Book a demo for a personal conversation." "Request a demo from a partner."
"Fully NLDS-compliant and future-proof." "Open source. Free. GDPR-compliant by default."
"Our WOO app for municipalities." "Our WOO solution, built on OpenCatalogi and Integriq."
"Synergistic chain collaboration for valuable insights." Just delete it. Start over with one concrete claim.
The eight rules · keep these in your head
1
Subject = a person, not a system.

"You" · "we" beats "the Solution" · "the system" every time. Even when the system does the work, write from the user.

2
Verb = action, not existence.

"Generate" beats "has the capability to generate". "Export" beats "offers export functionality". Active voice, no nominalisation.

3
Result before motivation.

User stories open with "As X I want Y so that Z". Flip it: "Y, so that Z." Or just "Y. Z."

4
Under 16 words.

If a sentence runs longer than 16, split it. Two short sentences read faster than one long one, and each claim becomes individually verifiable.

5
Jargon needs context.

WOO coordinator? Fine, but explain it on first use. SAML? Fine in a tech context. Chain collaboration? Never.

6
Abbreviations: full on first use, short after.

"Wet open overheid (Woo)" on first mention. Just "Woo" after. Don't make readers google.

7
One claim per sentence.

Marketing strings with multiple claims ("fast, scalable, secure and reliable") get skipped. One claim, one sentence. The reader can verify each claim separately.

8
No em-dashes. No Title Case.

Em-dashes (—) and double-dashes (--) are AI tells. Replace with a period, comma, or colon. Sentence case in headings, never Title Case. En-dashes (–) only for numeric ranges.

Banned words · the marketing-noise list

Words that turn up in tenders and shouldn't appear on our site.

Each of these signals a sentence hiding behind generic language. Strike the word and see if the sentence still works. If yes, it was noise.

Digital transformation Chain collaboration Valuable insights Future-proof State-of-the-art Platform that… Solution Synergy Proactive thinking Kernel

Exception · "Solution". The word is fine in customer-side translations of "solution", but never as a generic placeholder for our product. We have apps and solutions, never "the Solution".

Replace · "Kernel" → "workspace". Kernel reads as tech jargon (operating-system kernel, Linux kernel) and shuts SMB decision-makers out. Nextcloud calls itself a workspace; we quote that. "Six apps, one workspace, all open-source" instead of "six apps · one kernel". In API names we use slot="apex" for the centre element, same convention as cn-domain-tree.

Six AI tells · the ones that cost the most

AI never hands you anything bad enough to catch. It hands you the average version of every line, and average doesn't show up as a problem until you read six months of it back to back.

The full sweep runs to ten sections and lives in writing/references/ai-tells.md. These six are the expensive ones. Everything else in that file is hygiene; these are why the writing has no pulse.

1
"It's not X, it's Y." The fake flip.

It reads like somebody took a position, and nobody did, because both halves got written in the same breath and neither one was true to anybody before that sentence started. The test: which half did you hold before you wrote the line? Name it. If the answer is "neither, the shape sounded good", delete it and state one side flat. One per piece, maximum.

2
Triple staccato fragments.

Short line. Shorter line. One word. The full stops everywhere, the triple commas. It sounds cheap. The repair condition: a short line only performs when something long ran right before it. That's a condition, not a ban, because our voice is short by design. What fails is short after short after short with nothing to push off.

3
Words doing no work.

Finally. Actually. Simply. Good writers use them sparingly. AI drops one into every third sentence for texture. The test: pull the word out and the line says exactly what it said with it in. This one bites documentation hardest: "simply click Apps" is longer than "click Apps", and it quietly tells a stuck reader their problem is easy.

4
The bow at the end.

Every piece wraps up by summarising itself, one last line telling you what you just read. People close on what they want you to do next, or on whatever they couldn't stop thinking about. This is rule zero at the top of this page, and it's the one we break most.

5
Every brand sounds like every other brand.

This is the one that costs money. What brand identity are you running if you sound like every other vendor in the market? The logo-swap test: swap our name for a competitor's and swap our app names for theirs. If you could still hit send, there's no voice in there to swap. Capability lists and adjective stacks survive the swap. A named customer, a real number, an opinion with a cost attached does not.

6
Nobody made a decision.

This one explains the other five. Good copy has somebody in it who made a call: this claim over that one, this objection answered first, that proof cut. AI doesn't decide anything. It takes the average of what everybody else already decided and hands it back to you. Before anything ships, answer one question: what did I decide here? "I covered the topic" is not an answer.

You don't have to stop drafting with AI. Speed is speed. But read every draft the way you'd read a junior's first pass. Kill the flips, cut the fragments, and answer the one question before it goes out. If the copy isn't good, it isn't good, and it doesn't matter how clean it reads or how fast it came out.

Product pages · write for the business owner
A
Their vocabulary, not ours.

The reader runs a business with 10 to 500 people and has never heard of OpenRegister. Platform internals stay out of body copy: OpenRegister, Buildiq, Hermiq, schema, register, delta, layer, manifest, MCP, CalDAV, endpoint, JSON, leaf, token. A platform name is allowed in one place only: the CTA label that links to that app's page. Test: could your accountant's office manager read it without asking?

B
Every example proves added value.

A capability is not an example. Three beats, in order: today (what they do by hand) · instead (what happens now) · so (what it saves). If you cannot name the gain, you described a mechanism. Pick scenes from their day: back in the car after a client visit, the VAT return on the last Friday of the quarter, the certificate that expires while nobody looks.

C
Ground every scene in shipped functionality.

A scene is a promise. If the feature is spec-only, the example belongs in the spec, not on the page. Card eyebrows are verbs for the reader (Automate · Make it yours · Talk to it), never product names. Fixed CTA pair: "Install from the Nextcloud app store" · "Request a demo from a partner".

We say (wrong)They read (right)
"Clients are typed OpenRegister schemas with an audit trail." "Every change is logged, so you always know who did what."
"Changes are stored as a delta over the shipped manifest." "Your changes stay with every update."
"Two-way CardDAV sync with Nextcloud Contacts." "Change a number in the CRM and it is right on your phone."
"Every action is exposed as an MCP tool with scope × reach grants." "Every action can be handed to an assistant, and you decide per assistant what it may do."
"Accepting a quote starts a flow." "The moment the quote is accepted, the project exists and the kick-off task is on the right desk. The discount over ten percent waits for your approval."
Editorial moves · for opinion writing, not for product pages

The eight rules above apply to all Conduction copy. Opinion writing and blogs (rubenlinde.nl, guest contributions, iBestuur pieces) add a second layer: editorial moves. These are rhetorical moves that turn a blog into a blog instead of a product page with opinions. One move per beat. Don't stack them.

Always combine these with a persona. The moves are general Conduction; the persona colours the examples and the tone.

Move 1 · the hook
Thesis in sentence one.

No "in this piece we'll look at". The first sentence states the position. The second sharpens or extends. Four variants: bold-declarative, scene-setting, rhetorical question, or "imagine if" scenario.

"Open source won't fix your lock-in. You have to do that yourself."
Move 2 · the anchor
A personal observation.

"I notice it more and more in [X]." Ties the piece to a real place or conversation. Vary the setting (meeting room, terrace, FOSDEM bar, LinkedIn thread); don't reuse the same opener.

"Every time I visit a municipality I hear the same three words..."
Move 3 · the honesty pivot
"Let's be honest."

Signals the truth that nobody has said out loud yet. Once per piece, midway. The pivot earns its weight from what follows, not from the phrase itself.

"Let's be honest. The Dutch government chose this dependency themselves."
Move 4 · the responsibility flip
The reader is the cause.

Identify who actually made the choice the reader is now complaining about. Name them (usually that's the reader). Don't soften with "we" if "you" is correct. The flip should feel uncomfortable.

"You built that lock-in yourself."
Move 5 · the metaphor
One full image, worked.

A visual analogy, deployed once, then dropped. First try to invent something fresh for the topic. If nothing comes, pick a persona metaphor that fits. A bad metaphor is worse than none.

"Open source is not a vacuum cleaner that sucks up your mess."
Move 6 · the archetype person
A name and a job.

When the argument is abstract (lock-in, sovereignty, economics), make it concrete with an invented person. Give them a name, a job, a number. "Maria the bookshop owner, €5.50 a month."

"Maria from the bookshop switches from Microsoft 365 to Nextcloud on KPN."
Move 7 · the evidence stack
Stack numbers, close with fragments.

Two to four concrete statistics in a row, with sources. Then a short pivot line ("Let that sink in.") followed by the takeaway in fragments. Only works if the numbers are verifiable.

"45% carry OWASP vulnerabilities. 2.74x more security issues. 19% slower."
Move 8 · the slogan twist
Known slogan, sharper variant.

Take an existing slogan and modify it to extend your argument. Works as a section title or as a close.

"Public Money is Public Code → Public Money is Public Functionality."
Move 9 · the closing stack
Close on the action.

Rewritten. This used to be "three short sentences, the last one punches". That form is AI tell 2, and it no longer stands on its own. Two conditions now, both required: a long sentence runs immediately before the stack, and the last clause is the ask, not a summary. If the stack won't earn its run-up, write one sentence naming the action instead. No question, no "stay tuned", no "time will tell".

Fails: "Start today. Step by step. The rest will follow."
Passes: "...assembled one purchase order at a time, each signed by somebody who never read the exit clause. Go read yours."
Move 10 · the three-sentence punch
After a long paragraph, three short ones.

After a load-bearing explanation, drop three or four short single-clause sentences. They act as pauses for emphasis. Once per piece is plenty. The contrast with the surrounding rhythm is what makes them land.

"No. Of course not. That was never the point."
Move 11 · the reframe
"That's not X. That's Y."

Relabel the opposing position. Same object, sharper name. Two short sentences. The second noun has to bite. Gated: this is the shape of AI tell 1, so it only survives if you can name which half you held before you wrote the sentence. A real reframe renames something you already believed was misnamed. Shares one slot per piece with every other "it's not X, it's Y" construction, not one each. If it doesn't pass, drop the scaffolding and name the thing once: "That is lock-in with a friendlier invoice."

"That's not certainty. That's vendor lock-in wrapped as a service."
Move 12 · the hypocrisy reveal
Show the double standard.

Show that the standard the reader applies to one thing isn't the one they apply to another. Name both sides explicitly. One short rhetorical question to finish is fine. Two is an AI tell.

"Google Workspace went in without discussion. For open source we demand 100% parity. Why?"
Move 13 · the urgency frame
"The question isn't if, but how fast."

Reformulate the topic so the contested question is no longer "should we" but "how fast". Works as a hinge just before the close. Once per piece.

"The question isn't whether you need to migrate. The question is how fast you start."
Move 14 · the amplifier
A one-word follow-up.

After a quantity claim, drop a single-word sentence. "Literally." Or "Zero." Use sparingly; it loses power if repeated in the same piece.

"Lowers the bar to building your own to zero. Literally zero."
Structural patterns · the shape of a piece

Short to mid-length pieces (300–900 words) follow the 4-beat outline: hook, personal observation, metaphor, flip with action. No headings needed; the beats are rhythm.

Long opinion pieces (1000+ words) follow the 5-phase Escalation Arc: fair acknowledgment (acknowledge the opposing position), honesty pivot, evidence stacking, confrontational peak, constructive conclusion. No numbered headings for the phases. They are emotional beats, not section titles. The reader should feel the escalation, not see it.

Pitfall: cynicism without direction doesn't count. The piece always ends in "you can and should fix this". Frustration is welcome as fuel, not as destination.