docs — Public Documentation Standards
Customer-facing docs and API reference. Hosted via Mintlify. These standards are NEW — existing pages may not follow them yet. Reference pages that DO follow the standard: Catalog, Projects, Virtual Machines. Use those as examples.Critical Rules
api-reference/openapi.yamlis the single source of truth — update FIRST, then sync to raff-go → raff-cli → terraform-provider-raff- Never include admin/internal endpoints or fields — public API only
- Auth:
X-API-Keyonly — no JWT, noX-Account-ID, no admin keys - Verify before publishing — check endpoint actually works, don’t blindly document
- Direct language — no marketing, no jargon, go straight to value. Short paragraphs (2-3 sentences max)
- Update changelog — when adding/changing any API endpoint, add dated entry to the product’s changelog page
Writing Style
- Direct — “Create a VM” not “Virtual Machine Creation Guide”
- Simple — make complex things simple, but still comprehensive
- Action-oriented — lead with what the user can DO
- No filler — cut “In order to”, “Please note that”, “It is important to”
- Code examples — curl for API, yaml for Terraform, bash for CLI
- Short paragraphs — 2-3 sentences. If longer, break it up.
4 Product Pillars
Snapshots and Backups are point-in-time artifacts of a VM (and eventually a Volume), not standalone storage products — they live under Virtual Machines.
Reference (3 sections)
Product Page Template
Each product follows the same 5-section taxonomy: Overview / Quickstart & guides / Concepts / Details / Troubleshooting. New users follow Overview top-down; lookup users hit Details or Troubleshooting via search. Identical on every product so it stops being a design decision. Canonical copyable templates live at:docs/products/_template.mdx— Overview pagedocs/products/_template-quickstart.mdx— task how-todocs/products/_template-concept.mdx— explainerdocs/products/_template-details.mdx— spec sheetdocs/products/_template-troubleshooting.mdx— issue list
Sidebar rule — nested sub-groups, no products dropdown
The Products tab uses nested sub-groups indocs.json: pillar group → product group → section group → pages. Sub-pages are reachable directly from the sidebar, not just via cards on the Overview page. See feedback_no_products_switcher.md — we deliberately do NOT use Mintlify’s navigation.products dropdown switcher.
Overview page (index.mdx)
Products anchor handle navigation back; no inline back-link needed.
Screenshot convention. Every product Overview has a hero <Frame> and may add inline <Frame> blocks in quickstart/guide pages. Use the path /images/products/<pillar>/<product>/<name>.png and prefix the alt text with TODO: until the file exists. This makes outstanding screenshot work greppable.
Standard files per product
.mdx (e.g. troubleshooting.mdx); when it has multiple, it’s a folder. Both render the same in the sidebar group.
Changelog (single global page at /api-reference/changelog)
- One changelog for everything — not per-product. Grouped by date → product section.
- API version stays same until finalized (currently v1.0.0)
- Each change has a date, not a version bump
- When finalized → freeze, start next version
- This is NOT the app release log (
releases/vX.Y.Z.md) - Every entry has an emoji tag:
- 🟢 Added — new endpoint or new parameter
- 🔵 Updated — changed behavior or new param on existing endpoint (say WHICH part changed)
- 🟡 Deprecated — still works but will be removed (warn users, tell them what to use instead)
- 🔴 Removed — endpoint or parameter deleted, no longer available
- 🟣 Fixed — bug fix on existing endpoint
- Group by date → section (product + reference type):
- Section format:
{Product} — {Reference Type}where reference type is: API, CLI, or Terraform
API Reference Rules
Before Adding an Endpoint
- Endpoint must actually work in the backend — don’t document unimplemented features
- Must be public (customer-facing) — no admin-only endpoints
- If it returns internal fields, strip them first
POST Endpoints — Prerequisites
Every POST endpoint must clearly state what the user needs to fetch first:Each Endpoint Page
- Method + path
- Description (1-2 sentences)
- Prerequisites (what to fetch first)
- Parameters table (required/optional, type, description, example)
- Request example (curl)
- Response example (actual JSON)
- Error codes specific to this endpoint
Mintlify Conventions
- Pages:
.mdxformat - Navigation:
docs.json - API endpoints: auto-generated from
openapi.yaml - Components:
<Card>,<CardGroup>,<CodeGroup>,<Tabs>,<Accordion>,<Note>,<Warning> - Icons: use Mintlify icon names (e.g.
icon="plus",icon="server")
Quick Commands
Sync Order
- Edit
api-reference/openapi.yaml - Add/update MDX pages if needed
- Update product changelog page with dated entry
- Test locally:
npx mintlify dev - After merging: sync downstream (raff-go → CLI → Terraform)