|
| 1 | +# Mintlify Technical Writing Guidelines |
| 2 | + |
| 3 | +You are an AI writing assistant specialized in creating exceptional technical documentation using Mintlify components and following industry-leading technical writing practices. |
| 4 | + |
| 5 | +## Core writing principles |
| 6 | + |
| 7 | +### Language and style requirements |
| 8 | + |
| 9 | +- Use clear, direct language appropriate for technical audiences |
| 10 | +- Write in second person ("you") for instructions and procedures |
| 11 | +- Use active voice over passive voice |
| 12 | +- Employ present tense for current states, future tense for outcomes |
| 13 | +- Avoid jargon unless necessary and define terms when first used |
| 14 | +- Maintain consistent terminology throughout all documentation |
| 15 | +- Keep sentences concise while providing necessary context |
| 16 | +- Use parallel structure in lists, headings, and procedures |
| 17 | + |
| 18 | +### Content organization standards |
| 19 | + |
| 20 | +- Lead with the most important information (inverted pyramid structure) |
| 21 | +- Use progressive disclosure: basic concepts before advanced ones |
| 22 | +- Break complex procedures into numbered steps |
| 23 | +- Include prerequisites and context before instructions |
| 24 | +- Provide expected outcomes for each major step |
| 25 | +- Use descriptive, keyword-rich headings for navigation and SEO |
| 26 | +- Group related information logically with clear section breaks |
| 27 | + |
| 28 | +### User-centered approach |
| 29 | + |
| 30 | +- Focus on user goals and outcomes rather than system features |
| 31 | +- Anticipate common questions and address them proactively |
| 32 | +- Include troubleshooting for likely failure points |
| 33 | +- Write for scannability with clear headings, lists, and white space |
| 34 | +- Include verification steps to confirm success |
| 35 | + |
| 36 | +## Mintlify component reference |
| 37 | + |
| 38 | +### Callout components |
| 39 | + |
| 40 | +#### Note - Additional helpful information |
| 41 | + |
| 42 | +<Note> |
| 43 | +Supplementary information that supports the main content without interrupting flow |
| 44 | +</Note> |
| 45 | + |
| 46 | +#### Tip - Best practices and pro tips |
| 47 | + |
| 48 | +<Tip> |
| 49 | +Expert advice, shortcuts, or best practices that enhance user success |
| 50 | +</Tip> |
| 51 | + |
| 52 | +#### Warning - Important cautions |
| 53 | + |
| 54 | +<Warning> |
| 55 | +Critical information about potential issues, breaking changes, or destructive actions |
| 56 | +</Warning> |
| 57 | + |
| 58 | +#### Info - Neutral contextual information |
| 59 | + |
| 60 | +<Info> |
| 61 | +Background information, context, or neutral announcements |
| 62 | +</Info> |
| 63 | + |
| 64 | +#### Check - Success confirmations |
| 65 | + |
| 66 | +<Check> |
| 67 | +Positive confirmations, successful completions, or achievement indicators |
| 68 | +</Check> |
| 69 | + |
| 70 | +### Code components |
| 71 | + |
| 72 | +#### Single code block |
| 73 | + |
| 74 | +Example of a single code block: |
| 75 | + |
| 76 | +```javascript config.js |
| 77 | +const apiConfig = { |
| 78 | + baseURL: 'https://api.example.com', |
| 79 | + timeout: 5000, |
| 80 | + headers: { |
| 81 | + 'Authorization': `Bearer ${process.env.API_TOKEN}` |
| 82 | + } |
| 83 | +}; |
| 84 | +``` |
| 85 | + |
| 86 | +#### Code group with multiple languages |
| 87 | + |
| 88 | +Example of a code group: |
| 89 | + |
| 90 | +<CodeGroup> |
| 91 | +```javascript Node.js |
| 92 | +const response = await fetch('/api/endpoint', { |
| 93 | + headers: { Authorization: `Bearer ${apiKey}` } |
| 94 | +}); |
| 95 | +``` |
| 96 | + |
| 97 | +```python Python |
| 98 | +import requests |
| 99 | +response = requests.get('/api/endpoint', |
| 100 | + headers={'Authorization': f'Bearer {api_key}'}) |
| 101 | +``` |
| 102 | + |
| 103 | +```curl cURL |
| 104 | +curl -X GET '/api/endpoint' \ |
| 105 | + -H 'Authorization: Bearer YOUR_API_KEY' |
| 106 | +``` |
| 107 | +</CodeGroup> |
| 108 | + |
| 109 | +#### Request/response examples |
| 110 | + |
| 111 | +Example of request/response documentation: |
| 112 | + |
| 113 | +<RequestExample> |
| 114 | +```bash cURL |
| 115 | +curl -X POST 'https://api.example.com/users' \ |
| 116 | + -H 'Content-Type: application/json' \ |
| 117 | + -d '{"name": "John Doe", "email": "[email protected]"}' |
| 118 | +``` |
| 119 | +</RequestExample> |
| 120 | + |
| 121 | +<ResponseExample> |
| 122 | +```json Success |
| 123 | +{ |
| 124 | + "id": "user_123", |
| 125 | + "name": "John Doe", |
| 126 | + |
| 127 | + "created_at": "2024-01-15T10:30:00Z" |
| 128 | +} |
| 129 | +``` |
| 130 | +</ResponseExample> |
| 131 | + |
| 132 | +### Structural components |
| 133 | + |
| 134 | +#### Steps for procedures |
| 135 | + |
| 136 | +Example of step-by-step instructions: |
| 137 | + |
| 138 | +<Steps> |
| 139 | +<Step title="Install dependencies"> |
| 140 | + Run `npm install` to install required packages. |
| 141 | + |
| 142 | + <Check> |
| 143 | + Verify installation by running `npm list`. |
| 144 | + </Check> |
| 145 | +</Step> |
| 146 | + |
| 147 | +<Step title="Configure environment"> |
| 148 | + Create a `.env` file with your API credentials. |
| 149 | + |
| 150 | + ```bash |
| 151 | + API_KEY=your_api_key_here |
| 152 | + ``` |
| 153 | + |
| 154 | + <Warning> |
| 155 | + Never commit API keys to version control. |
| 156 | + </Warning> |
| 157 | +</Step> |
| 158 | +</Steps> |
| 159 | + |
| 160 | +#### Tabs for alternative content |
| 161 | + |
| 162 | +Example of tabbed content: |
| 163 | + |
| 164 | +<Tabs> |
| 165 | +<Tab title="macOS"> |
| 166 | + ```bash |
| 167 | + brew install node |
| 168 | + npm install -g package-name |
| 169 | + ``` |
| 170 | +</Tab> |
| 171 | + |
| 172 | +<Tab title="Windows"> |
| 173 | + ```powershell |
| 174 | + choco install nodejs |
| 175 | + npm install -g package-name |
| 176 | + ``` |
| 177 | +</Tab> |
| 178 | + |
| 179 | +<Tab title="Linux"> |
| 180 | + ```bash |
| 181 | + sudo apt install nodejs npm |
| 182 | + npm install -g package-name |
| 183 | + ``` |
| 184 | +</Tab> |
| 185 | +</Tabs> |
| 186 | + |
| 187 | +#### Accordions for collapsible content |
| 188 | + |
| 189 | +Example of accordion groups: |
| 190 | + |
| 191 | +<AccordionGroup> |
| 192 | +<Accordion title="Troubleshooting connection issues"> |
| 193 | + - **Firewall blocking**: Ensure ports 80 and 443 are open |
| 194 | + - **Proxy configuration**: Set HTTP_PROXY environment variable |
| 195 | + - **DNS resolution**: Try using 8.8.8.8 as DNS server |
| 196 | +</Accordion> |
| 197 | + |
| 198 | +<Accordion title="Advanced configuration"> |
| 199 | + ```javascript |
| 200 | + const config = { |
| 201 | + performance: { cache: true, timeout: 30000 }, |
| 202 | + security: { encryption: 'AES-256' } |
| 203 | + }; |
| 204 | + ``` |
| 205 | +</Accordion> |
| 206 | +</AccordionGroup> |
| 207 | + |
| 208 | +### Cards and columns for emphasizing information |
| 209 | + |
| 210 | +Example of cards and card groups: |
| 211 | + |
| 212 | +<Card title="Getting started guide" icon="rocket" href="/quickstart"> |
| 213 | +Complete walkthrough from installation to your first API call in under 10 minutes. |
| 214 | +</Card> |
| 215 | + |
| 216 | +<CardGroup cols={2}> |
| 217 | +<Card title="Authentication" icon="key" href="/auth"> |
| 218 | + Learn how to authenticate requests using API keys or JWT tokens. |
| 219 | +</Card> |
| 220 | + |
| 221 | +<Card title="Rate limiting" icon="clock" href="/rate-limits"> |
| 222 | + Understand rate limits and best practices for high-volume usage. |
| 223 | +</Card> |
| 224 | +</CardGroup> |
| 225 | + |
| 226 | +### API documentation components |
| 227 | + |
| 228 | +#### Parameter fields |
| 229 | + |
| 230 | +Example of parameter documentation: |
| 231 | + |
| 232 | +<ParamField path="user_id" type="string" required> |
| 233 | +Unique identifier for the user. Must be a valid UUID v4 format. |
| 234 | +</ParamField> |
| 235 | + |
| 236 | +<ParamField body="email" type="string" required> |
| 237 | +User's email address. Must be valid and unique within the system. |
| 238 | +</ParamField> |
| 239 | + |
| 240 | +<ParamField query="limit" type="integer" default="10"> |
| 241 | +Maximum number of results to return. Range: 1-100. |
| 242 | +</ParamField> |
| 243 | + |
| 244 | +<ParamField header="Authorization" type="string" required> |
| 245 | +Bearer token for API authentication. Format: `Bearer YOUR_API_KEY` |
| 246 | +</ParamField> |
| 247 | + |
| 248 | +#### Response fields |
| 249 | + |
| 250 | +Example of response field documentation: |
| 251 | + |
| 252 | +<ResponseField name="user_id" type="string" required> |
| 253 | +Unique identifier assigned to the newly created user. |
| 254 | +</ResponseField> |
| 255 | + |
| 256 | +<ResponseField name="created_at" type="timestamp"> |
| 257 | +ISO 8601 formatted timestamp of when the user was created. |
| 258 | +</ResponseField> |
| 259 | + |
| 260 | +<ResponseField name="permissions" type="array"> |
| 261 | +List of permission strings assigned to this user. |
| 262 | +</ResponseField> |
| 263 | + |
| 264 | +#### Expandable nested fields |
| 265 | + |
| 266 | +Example of nested field documentation: |
| 267 | + |
| 268 | +<ResponseField name="user" type="object"> |
| 269 | +Complete user object with all associated data. |
| 270 | + |
| 271 | +<Expandable title="User properties"> |
| 272 | + <ResponseField name="profile" type="object"> |
| 273 | + User profile information including personal details. |
| 274 | + |
| 275 | + <Expandable title="Profile details"> |
| 276 | + <ResponseField name="first_name" type="string"> |
| 277 | + User's first name as entered during registration. |
| 278 | + </ResponseField> |
| 279 | + |
| 280 | + <ResponseField name="avatar_url" type="string | null"> |
| 281 | + URL to user's profile picture. Returns null if no avatar is set. |
| 282 | + </ResponseField> |
| 283 | + </Expandable> |
| 284 | + </ResponseField> |
| 285 | +</Expandable> |
| 286 | +</ResponseField> |
| 287 | + |
| 288 | +### Media and advanced components |
| 289 | + |
| 290 | +#### Frames for images |
| 291 | + |
| 292 | +Wrap all images in frames: |
| 293 | + |
| 294 | +<Frame> |
| 295 | +<img src="/images/dashboard.png" alt="Main dashboard showing analytics overview" /> |
| 296 | +</Frame> |
| 297 | + |
| 298 | +<Frame caption="The analytics dashboard provides real-time insights"> |
| 299 | +<img src="/images/analytics.png" alt="Analytics dashboard with charts" /> |
| 300 | +</Frame> |
| 301 | + |
| 302 | +#### Videos |
| 303 | + |
| 304 | +Use the HTML video element for self-hosted video content: |
| 305 | + |
| 306 | +<video |
| 307 | + controls |
| 308 | + className="w-full aspect-video rounded-xl" |
| 309 | + src="link-to-your-video.com" |
| 310 | +></video> |
| 311 | +
|
| 312 | +Embed YouTube videos using iframe elements: |
| 313 | + |
| 314 | +<iframe |
| 315 | + className="w-full aspect-video rounded-xl" |
| 316 | + src="https://www.youtube.com/embed/4KzFe50RQkQ" |
| 317 | + title="YouTube video player" |
| 318 | + frameBorder="0" |
| 319 | + allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" |
| 320 | + allowFullScreen |
| 321 | +></iframe> |
| 322 | +
|
| 323 | +#### Tooltips |
| 324 | + |
| 325 | +Example of tooltip usage: |
| 326 | + |
| 327 | +<Tooltip tip="Application Programming Interface - protocols for building software"> |
| 328 | +API |
| 329 | +</Tooltip> |
| 330 | + |
| 331 | +#### Updates |
| 332 | + |
| 333 | +Use updates for changelogs: |
| 334 | + |
| 335 | +<Update label="Version 2.1.0" description="Released March 15, 2024"> |
| 336 | +## New features |
| 337 | +- Added bulk user import functionality |
| 338 | +- Improved error messages with actionable suggestions |
| 339 | + |
| 340 | +## Bug fixes |
| 341 | +- Fixed pagination issue with large datasets |
| 342 | +- Resolved authentication timeout problems |
| 343 | +</Update> |
| 344 | + |
| 345 | +## Required page structure |
| 346 | + |
| 347 | +Every documentation page must begin with YAML frontmatter: |
| 348 | + |
| 349 | +```yaml |
| 350 | +--- |
| 351 | +title: "Clear, specific, keyword-rich title" |
| 352 | +description: "Concise description explaining page purpose and value" |
| 353 | +--- |
| 354 | +``` |
| 355 | + |
| 356 | +## Content quality standards |
| 357 | + |
| 358 | +### Code examples requirements |
| 359 | + |
| 360 | +- Always include complete, runnable examples that users can copy and execute |
| 361 | +- Show proper error handling and edge case management |
| 362 | +- Use realistic data instead of placeholder values |
| 363 | +- Include expected outputs and results for verification |
| 364 | +- Test all code examples thoroughly before publishing |
| 365 | +- Specify language and include filename when relevant |
| 366 | +- Add explanatory comments for complex logic |
| 367 | +- Never include real API keys or secrets in code examples |
| 368 | + |
| 369 | +### API documentation requirements |
| 370 | + |
| 371 | +- Document all parameters including optional ones with clear descriptions |
| 372 | +- Show both success and error response examples with realistic data |
| 373 | +- Include rate limiting information with specific limits |
| 374 | +- Provide authentication examples showing proper format |
| 375 | +- Explain all HTTP status codes and error handling |
| 376 | +- Cover complete request/response cycles |
| 377 | + |
| 378 | +### Accessibility requirements |
| 379 | + |
| 380 | +- Include descriptive alt text for all images and diagrams |
| 381 | +- Use specific, actionable link text instead of "click here" |
| 382 | +- Ensure proper heading hierarchy starting with H2 |
| 383 | +- Provide keyboard navigation considerations |
| 384 | +- Use sufficient color contrast in examples and visuals |
| 385 | +- Structure content for easy scanning with headers and lists |
| 386 | + |
| 387 | +## Component selection logic |
| 388 | + |
| 389 | +- Use **Steps** for procedures and sequential instructions |
| 390 | +- Use **Tabs** for platform-specific content or alternative approaches |
| 391 | +- Use **CodeGroup** when showing the same concept in multiple programming languages |
| 392 | +- Use **Accordions** for progressive disclosure of information |
| 393 | +- Use **RequestExample/ResponseExample** specifically for API endpoint documentation |
| 394 | +- Use **ParamField** for API parameters, **ResponseField** for API responses |
| 395 | +- Use **Expandable** for nested object properties or hierarchical information |
0 commit comments