Color palette

Five primary tokens drive everything. All secondary colors derive from these. Use CSS custom properties consistently so the palette can be updated in one place.

Navy--gmd-navy · #1C2E40
Forest--gmd-green · #3A6B49
Cream--gmd-cream · #F7F4EF
Slate--gmd-slate · #3D4A57
Muted--gmd-muted · #6B7280
Border--gmd-border · #DDD8D0

Semantic usage

PurposeTokenNotes
Page headers, nav backgrounds--gmd-navyNever use for body text
Links, CTAs, accents--gmd-greenMin. 4.5:1 contrast on cream
Page/document background--gmd-creamNot pure white — warmer
Body text--gmd-slateAll long-form prose
Captions, metadata, labels--gmd-mutedNever for body text
Warnings#991B1B on #FEE2E2Use sparingly
Notes / info#0E7490 on #E0F2FECallout blocks only

Typography

Three faces cover every context. Load all three from Google Fonts or self-host for production.

RoleFaceUsage
Display / HeadingsPlayfair DisplayH1–H3, pull quotes, section titles
Body / UIDM SansAll body copy, labels, navigation, captions
Code / MonoJetBrains MonoCode blocks, inline code, filenames, tokens
48px / 600
Playfair
Page Title
32px / 600
Playfair
Section Heading
20px / 600
Playfair
Subsection Heading
16px / 400
DM Sans
Body text. Clear and readable at 16px, line-height 1.7. Used for all prose in client deliverables and site content.
13px / 400
DM Sans
Caption, metadata, label text — muted color, never for body copy.
14px / 400
JetBrains Mono
inline code · filenames · tokens

Spacing scale

Base unit is 4px. All layout spacing uses multiples.

4px · xs
Icon gaps, tight labels
8px · sm
Internal component padding
16px · md
Standard paragraph gap, card padding
24px · lg
Between related sections
48px · xl
Between major sections
80px · 2xl
Page-level white space

Voice principles

These apply to all writing — client docs, the site, blog posts, LinkedIn. They reflect a 40-year philosophy about how documentation actually works.

Register by context

ContextRegisterPersonKey notes
Client deliverables (API docs, procedures, reference) Professional, precise, neutral Second (you/your) No opinions. Exact terminology. Match the client's product vocabulary.
greenmtndocs.com (services, about) Authoritative, direct, approachable First (I/my) Outcomes over process. Metrics where earned. No fluff.
Blog / oldtechwriter.com Peer-to-peer, analytical, opinionated First (I/my), some second Stakes a position. Earns agreement. Not a press release.
LinkedIn posts Peer-level, specific, no hype First (I/my) One idea. Short paragraphs. Link in first comment, not body.
Release notes Terse, factual, user-impact-first Third (the system / you) What changed. Why it matters. No marketing language.

Vocabulary rules

Use these words

UseInstead ofWhy
buildleverage, utilizeDirect. Everyone knows what it means.
configureset up (when technical)Precise for technical audiences.
run, executeperform, carry outConcrete for CLI/code contexts.
shows, displayssurfaces, exposesJargon-free when writing for users.
requiresnecessitatesSimpler, same meaning.
useutilize, leverageLeverage is overused and usually wrong.

Number rules

Avoid

The platform leverages AI to surface actionable insights that enable teams to synergize their documentation workflows and drive efficiency gains across the organization.

Use

The platform uses AI to flag outdated content before it reaches users. Documentation stays accurate with less manual review.

Procedure

Use for any task that requires steps in a specific order. The template below applies to client docs, how-to articles, and setup guides alike.

PROCEDURE TEMPLATE Markdown
## [Verb phrase: "Configure the webhook endpoint"]

Brief context sentence. What this accomplishes, and when you'd do it.

**Before you begin:**
- Prerequisite one
- Prerequisite two (omit this section if none)

**Steps:**

1. [Imperative verb phrase.] Expected result if not obvious.

2. [Next step.] Add a code block if the user needs to run something:
   ```bash
   command --flag value
   ```

3. Verify the change by [doing X]. You should see [Y].

**Result:** One sentence. What the user now has or can do.

**Next steps:** (Optional) Link to the related task or reference page.
i Procedure rules: Steps are numbered. Each step is one action. If a step branches ("if X, do Y; otherwise do Z"), split it into two steps or use a decision table. Don't mix steps with reference content — link out instead.

API endpoint reference

Consistent structure for every endpoint. Readers scan — put the most important information (method, path, what it does) first.

API ENDPOINT TEMPLATE Markdown
### `POST /v1/integrations/{id}/sync`

Triggers a manual sync for the specified integration.

**Authentication:** Bearer token required  
**Rate limit:** 10 requests per minute per workspace

#### Request

| Field       | Type    | Required | Description                        |
|-------------|---------|----------|------------------------------------|
| `force`     | boolean | No       | Overrides the cooldown period.     |
| `source_id` | string  | Yes      | ID of the source connection.       |

**Example request:**
```http
POST /v1/integrations/int_8x3k/sync
Authorization: Bearer {token}
Content-Type: application/json

{
  "force": false,
  "source_id": "src_4j2m"
}
```

#### Response

Returns a `SyncJob` object on success.

```json
{
  "job_id": "job_9z1p",
  "status": "queued",
  "created_at": "2026-04-19T14:30:00Z"
}
```

#### Error codes

| Code | Meaning                                     |
|------|---------------------------------------------|
| 400  | Invalid or missing `source_id`              |
| 409  | Sync already in progress for this integration |
| 429  | Rate limit exceeded                         |

Release notes

RELEASE NOTES TEMPLATE Markdown
## 2.4.1 — April 19, 2026

### New features
- **Sync scheduling:** Set recurring sync windows per integration from the Settings panel. [See Scheduling syncs →]

### Improvements
- Mapping validation now runs before a sync starts, not after. This catches configuration errors earlier and reduces failed jobs.
- The error reference page now includes a filterable lookup table.

### Bug fixes
- Fixed an issue where the OroCommerce connector dropped custom field values on update. (#1847)
- Corrected rate limit headers that were reporting the wrong reset time.

### Breaking changes

> **Heads up:** The `POST /sync` endpoint now requires `source_id`. Calls that omit it return a 400 error starting in this release. Update any automated scripts before upgrading.
! Release note rules: User-impact first — describe what changed and why it matters, not what the engineering team did. Only use "Breaking changes" if upgrading requires user action. Bug fixes reference issue numbers where possible.

Error reference entry

ERROR REFERENCE TEMPLATE Markdown
## ERR-2041: Source connection timeout

**Severity:** Warning  
**Component:** Data sync engine  
**Introduced:** v2.1.0

### What it means

The sync job could not reach the source system within the configured timeout window. The job is paused, not failed — it will retry automatically.

### Common causes

- The source system is temporarily unavailable or under high load.
- A firewall rule is blocking outbound connections on port 443.
- The OAuth token has expired and the connector can't refresh it.

### Resolution

1. Confirm the source system is reachable from your network.
2. Check the connection credentials in **Settings → Integrations**.
3. If the token has expired, re-authenticate from the integration detail page.

If the error persists after re-authentication, contact support with the `job_id` from the error log.

Headings

LevelUse forRules
H1Page or document titleOne per document. Not in body text.
H2Major sectionSentence case. No trailing period. Substantive noun phrase.
H3Subsection within an H2Sentence case. Can use verb phrase or noun phrase.
H4+AvoidIf you need H4, restructure the content instead.

Lists

TypeUse whenAvoid when
Ordered (numbered)Steps must happen in sequenceItems have no inherent order
Unordered (bullets)3 or more parallel itemsFewer than 3 items — write prose instead
Definition listTerm + explanation pairsItems aren't really definitions

Code and commands

# Always tag the language
```bash
pip install --break-system-packages requests
```

# Not this
```
pip install --break-system-packages requests
```

Callouts

Four types. Use the one that matches the actual severity.

i Note: Background information that adds value but isn't required to complete the task.
Tip: Saves time or reduces friction. Optional. The reader won't be harmed by skipping it.
! Important: Affects the outcome. The reader should understand this before proceeding.
Warning: Risk of data loss, downtime, billing impact, or an irreversible action. Use sparingly — overuse trains readers to ignore them.

Tables

Reference hierarchy

When a style question isn't answered here, escalate in this order and stop at the first answer:

#SourceUse for
1This document (GMD house style)All client work, greenmtndocs.com, blog, LinkedIn. Overrides everything below.
2Google Developer Documentation Style GuideTechnical writing conventions, grammar, formatting, word choices not covered above.
3Merriam-WebsterSpelling. American English. When MW lists multiple spellings, use the first.
4Chicago Manual of Style (17th ed.)Non-technical style questions not covered by the above.
iFor client projects, the client's own style guide sits at position 0 — above this document. Establish this at project kickoff.

Voice & tone

The Google guide describes the target as conversational, friendly, and respectful — not pedantic, not overly casual, not pushy. The goal is a knowledgeable colleague talking to a competent peer, not a lecturer or a marketer.

Language & grammar

Person and pronouns

SituationUseExample
Instructions; anything the reader doesSecond person (you, your)"Open the configuration file."
Actions performed by the softwareThird person or subject-first"The API returns a 404 if the resource isn't found."
Referring to the organizationFirst person plural OK (we, our) — but use sparingly in client docs"We recommend testing in a staging environment first."
Singular generic personthey/their"When a user saves their settings…"

Tense

Voice

Passive (avoid)

The configuration file is generated by the script when the command is run.

Active (use)

The script generates a configuration file when you run the command.

Use passive voice when the actor is unknown, irrelevant, or intentionally de-emphasized. In those cases it's fine.

Capitalization

Spelling

Anthropomorphism

Software doesn't know, think, want, or feel. Be precise about what systems actually do.

Avoid

The system knows which users have permissions. The API wants a valid token before it will respond.

Use

The system checks permissions before returning data. The API requires a valid token.

Formatting rules (Google guide)

Procedures

Lists

Code in text

UI elements

Element typeFormattingExample
Buttons, tabs, menus, labelsBold, match UI capitalization exactlyClick Save changes.
Menu path / navigationBold items, right arrow between levelsGo to Settings > Integrations.
Keyboard keysCapitalize, boldPress Ctrl+S.
Field namesBoldIn the API key field, paste your token.
User-entered valuesCode fontIn the Name field, type my-integration.

Special topics

Timeless documentation

Documentation that references a specific "now" ages instantly. Write to stay accurate across software versions and time.

Global audience

Inclusive language

Excessive claims and future features

How to use this list

Each entry shows the preferred form, any disallowed alternatives, and usage notes. Entries marked Client-specific apply only to the named project — don't carry them into other work.

Before adding a new term, check whether the Google word list already covers it. Add to this list only when you need to override Google's guidance or establish a convention that's unique to GMD or a client project.

A–F

Use thisNot thisNotes
allowlistwhitelistInclusive language. Consistent with Google guide.
blocklistblacklistInclusive language. Consistent with Google guide.
canceledcancelledAmerican English spelling (one L).
checkboxcheck box, check-boxOne word.
clickclick onDrop "on": "Click Save" not "Click on Save."
command line (n.) / command-line (adj.)commandline, command line (adj.)"Use the command line." / "a command-line tool."
data (plural)data (singular)Treat as plural: "The data are" — unless the client style guide differs.
dropdowndrop-down, drop downOne word in all uses.
emaile-mailNo hyphen.
endpointend point, end-pointOne word in API/technical contexts.
filenamefile name, file-nameOne word.
for examplee.g.Spell out in running text. Use "e.g." only in parentheses or tables.

G–M

Use thisNot thisNotes
log in (v.) / login (n., adj.)log-in, login (verb)"Log in to the dashboard." / "your login credentials."
mapping collectionmapping set, mapping groupClient-specific (Client-company). Always two words, lowercase.
metadatameta-data, meta dataOne word.
more thanover (for quantities)"More than 10 records" not "Over 10 records" — unless spatial.

N–Z

Use thisNot thisNotes
payloadrequest body (inconsistently)Use payload when referring to message content in transit; use request body for the HTTP-specific field.
primary / replicamaster / slaveInclusive language. Consistent with Google guide.
real time (n.) / real-time (adj.)realtime, real time (adj.)"Updates happen in real time." / "real-time sync."
selectchoose (for UI checkboxes/radio buttons)"Select the checkbox." Use "choose" for conceptual decisions, not UI actions.
set up (v.) / setup (n., adj.)setup (verb), set-up"Set up the integration." / "the setup process."
sign in / sign outlog in / log out (for user-facing UI)Use sign in/out for user-facing content; log in/out for CLI and developer contexts.
sync (v. and n.)synchronize (unless formal register)Acceptable as a verb: "Sync the integration." Avoid in formal client reports.
that (restrictive) / which (non-restrictive)which used restrictively"The file that failed" (restricts). "The file, which was large, failed" (adds info).
timestamptime stamp, time-stampOne word.
usernameuser name, user-nameOne word.
workflowwork flow, work-flowOne word.
workaroundwork around (noun)One word as noun/adjective. "Work around" as verb: "work around the issue."

Terms to avoid

These terms appear frequently in tech writing but should be replaced with more precise language.

AvoidUse insteadWhy
above / below (for cross-references)The section name or a direct linkPosition changes when content is reformatted or reordered.
as perper, according to, followingFormal filler. "Per the spec" or "According to the spec."
best-in-class, world-class, industry-leadingSpecific metrics or omitUnverifiable. Creates legal risk.
blind spotgap, limitation, oversightAbleist connotation.
crazy, insaneunexpected, unusual, significantAbleist connotation.
cripple, crippledlimit, degrade, slow downAbleist connotation.
currentlyOmit or restructureCreates false specificity; ages quickly.
easy, simple, justOmitCondescending when the task turns out to be hard for the reader. Never characterize difficulty.
going forwardOmit or restructureFiller. Say what changes, not that things are changing.
leverage (verb)use, apply, build onOverused. Almost always replaceable with a simpler verb.
new (for features)Omit or include a version numberFeatures stop being new; the doc doesn't update itself.
pleaseOmitAdds noise in instructions without adding meaning.
robustreliable, scalable, fault-tolerant (whichever is accurate)Vague marketing language. Be specific about what the system actually does.
sanity checkverification, review, checkAbleist connotation.
seamlessOmit or describe what actually happensVague promise. If the integration is smooth, show why.
utilizeuseAlmost always a longer version of "use." Reserve for the specific meaning "to use something for a purpose it wasn't designed for."