Nineninesix docs — Mintlify
This repo is the source for the Nineninesix documentation site, built with Mintlify and deployed from the connected GitHub repo. Pushes tomain trigger an automatic build and deploy; PRs get preview builds.
Layout
- Pages are
.mdx. Navpagesvalues omit the extension and mirror the file tree (api-reference/speech→api-reference/speech.mdx). - Every page needs frontmatter with at least
title(required) anddescription. - The Speech/Voices groups set
"openapi": "api-reference/openapi.json", so Mintlify auto-generates an interactive page per REST endpoint (listed inpagesas"POST /tts/bytes"etc.) alongside the narrative pages. api-reference/websocket.mdxbinds 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.
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 fromcontent/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.json↔documentation.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/websocketlives in a separateasyncapi.yaml(AsyncAPI 3.0). Keep the send frame (GenerationRequest) and receive frames (chunk/done/error) in sync with the/tts/bytesrequest schema inopenapi.json. - Streaming endpoints (
/tts/sse,/tts/websocket) areraw-only; only/tts/bytesacceptswav.
Verify before pushing
- Assumed dashboard host
https://nineninesix.aiand API basehttps://api.nineninesix.ai; contact emailulan@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.