Skip to main content

Nineninesix docs — Mintlify

This repo is the source for the Nineninesix documentation site, built with Mintlify and deployed from the connected GitHub repo. Pushes to main trigger an automatic build and deploy; PRs get preview builds.

Layout

  • Pages are .mdx. Nav pages values omit the extension and mirror the file tree (api-reference/speechapi-reference/speech.mdx).
  • Every page needs frontmatter with at least title (required) and description.
  • The Speech/Voices groups set "openapi": "api-reference/openapi.json", so Mintlify auto-generates an interactive page per REST endpoint (listed in pages as "POST /tts/bytes" etc.) alongside the narrative pages.
  • api-reference/websocket.mdx binds the AsyncAPI channel via frontmatter (asyncapi: "/api-reference/asyncapi.yaml tts"), which renders the interactive WebSocket Connect playground. This is the reason for using Mintlify over Documentation.ai / Apidog — it’s the platform that supports an AsyncAPI-driven WebSocket playground on a git-backed MDX site.

Mintlify component conventions

Use Mintlify components:
  • Admonitions: <Info>, <Warning>, <Tip>, <Note>, <Check>.
  • Card grids: <CardGroup cols={2|3|4}> wrapping <Card title=… icon=… href=…> (description is the child text). Icon names resolve against Font Awesome by default (the ones in use — rocket, key, code, box — also exist in Lucide).
  • Tabbed code: <CodeGroup> around fenced blocks, where each block’s title meta string becomes the tab label — e.g. ```python Python.
Config lives in docs.json: theme, name, logo, favicon, colors, navbar.primary, navigation.tabs[].groups[].pages[], seo. REST specs are referenced with a group-level openapi; AsyncAPI specs with a page-level asyncapi frontmatter (or a group-level asyncapi).

Source of truth / syncing

Wording originates from content/docs/*.mdx in the main app repo (fumadocs). These files are the Mintlify conversion of that content. When app docs change, re-apply the component mapping above. Current content reflects API v0.3.0 (see changelog.mdx). fumadocs/Mintlify component mapping used during conversion: <Info><Callout kind="info">, <Warning><Callout kind="alert">, <CardGroup><Columns>, ```lang Title<CodeGroup tabs="…">, docs.jsondocumentation.json. (The right-hand side is the interim Documentation.ai form this repo previously used — kept here for reference.)

WebSocket / AsyncAPI notes

  • WebSocket cannot be modelled in OpenAPI, so /tts/websocket lives in a separate asyncapi.yaml (AsyncAPI 3.0). Keep the send frame (GenerationRequest) and receive frames (chunk/done/error) in sync with the /tts/bytes request schema in openapi.json.
  • Streaming endpoints (/tts/sse, /tts/websocket) are raw-only; only /tts/bytes accepts wav.

Verify before pushing

  • Assumed dashboard host https://nineninesix.ai and API base https://api.nineninesix.ai; contact email ulan@nineninesix.ai.
  • Confirm the AsyncAPI frontmatter reference (asyncapi: "/api-reference/asyncapi.yaml tts") renders the WebSocket playground in the Mintlify preview build; adjust the channel token (tts) if Mintlify expects an operation id instead.