diff --git a/docs/explanation/agent-internals.mdx b/docs/explanation/agent-internals.mdx
index 6c6bd3a..2f38405 100644
--- a/docs/explanation/agent-internals.mdx
+++ b/docs/explanation/agent-internals.mdx
@@ -2,6 +2,7 @@
type: explanation
title: Agent Internals
sidebar_position: 5
+description: Deep dive into Fishjam agent architecture, lifecycle, and how to integrate without using a server SDK.
---
import Tabs from "@theme/Tabs";
diff --git a/docs/explanation/data-channels.mdx b/docs/explanation/data-channels.mdx
index 31d5124..8f85e50 100644
--- a/docs/explanation/data-channels.mdx
+++ b/docs/explanation/data-channels.mdx
@@ -1,6 +1,7 @@
---
type: explanation
sidebar_position: 7
+description: Send and receive arbitrary binary data between peers using Fishjam data channels.
---
import Tabs from "@theme/Tabs";
diff --git a/docs/explanation/public-livestreams.mdx b/docs/explanation/public-livestreams.mdx
index c556be0..e8f98db 100644
--- a/docs/explanation/public-livestreams.mdx
+++ b/docs/explanation/public-livestreams.mdx
@@ -2,6 +2,7 @@
type: explanation
title: Private vs Public Livestreams
sidebar_position: 6
+description: Understand the difference between private and public livestreams in Fishjam and how to configure them.
---
import Tabs from "@theme/Tabs";
diff --git a/docs/how-to/backend/fastapi-example.mdx b/docs/how-to/backend/fastapi-example.mdx
index 3564cc2..dd88625 100644
--- a/docs/how-to/backend/fastapi-example.mdx
+++ b/docs/how-to/backend/fastapi-example.mdx
@@ -1,6 +1,7 @@
---
sidebar_position: 1
title: FastAPI
+description: Example FastAPI server integration using the Fishjam Python SDK.
---
# FastAPI example
diff --git a/docs/how-to/backend/fastify-example.mdx b/docs/how-to/backend/fastify-example.mdx
index 2fd837c..f9450d1 100644
--- a/docs/how-to/backend/fastify-example.mdx
+++ b/docs/how-to/backend/fastify-example.mdx
@@ -1,6 +1,7 @@
---
sidebar_position: 0
title: Fastify
+description: Example Fastify server integration using the Fishjam Node.js SDK.
---
import Tabs from "@theme/Tabs";
diff --git a/docs/how-to/backend/production-deployment.mdx b/docs/how-to/backend/production-deployment.mdx
index 7be6b05..04917c4 100644
--- a/docs/how-to/backend/production-deployment.mdx
+++ b/docs/how-to/backend/production-deployment.mdx
@@ -1,5 +1,6 @@
---
type: how-to
+description: Deploy your Fishjam backend safely to production, moving from sandbox to a production-ready setup.
---
import Tabs from "@theme/Tabs";
diff --git a/docs/how-to/backend/server-setup.mdx b/docs/how-to/backend/server-setup.mdx
index 84903f3..d572b33 100644
--- a/docs/how-to/backend/server-setup.mdx
+++ b/docs/how-to/backend/server-setup.mdx
@@ -1,5 +1,6 @@
---
sidebar_position: 0
+description: Install and configure a Fishjam server SDK for Node.js or Python, or integrate via the bare REST API.
---
import Tabs from "@theme/Tabs";
diff --git a/docs/how-to/client/background-streaming.mdx b/docs/how-to/client/background-streaming.mdx
index eb6e47d..c2829df 100644
--- a/docs/how-to/client/background-streaming.mdx
+++ b/docs/how-to/client/background-streaming.mdx
@@ -1,6 +1,8 @@
---
+title: "Background calls"
sidebar_position: 13
sidebar_label: "Background calls 📱"
+description: Enable calls running in the background on Android and iOS in React Native applications.
---
import Tabs from "@theme/Tabs";
diff --git a/docs/how-to/client/connecting.mdx b/docs/how-to/client/connecting.mdx
index f112ec6..04675a3 100644
--- a/docs/how-to/client/connecting.mdx
+++ b/docs/how-to/client/connecting.mdx
@@ -1,5 +1,6 @@
---
sidebar_position: 3
+description: Connect to a Fishjam room using a peer token and room URL obtained from your backend.
---
import Tabs from "@theme/Tabs";
diff --git a/docs/how-to/client/custom-sources.mdx b/docs/how-to/client/custom-sources.mdx
index a62c897..def2c69 100644
--- a/docs/how-to/client/custom-sources.mdx
+++ b/docs/how-to/client/custom-sources.mdx
@@ -1,6 +1,8 @@
---
+title: "Custom sources"
sidebar_position: 8
sidebar_label: "Custom sources 🌐"
+description: Stream non-standard video or audio sources (e.g. WebGL, WebGPU, Three.js) through Fishjam in web apps.
---
import Tabs from "@theme/Tabs";
diff --git a/docs/how-to/client/debug-logging.mdx b/docs/how-to/client/debug-logging.mdx
index fb51e1d..67b9667 100644
--- a/docs/how-to/client/debug-logging.mdx
+++ b/docs/how-to/client/debug-logging.mdx
@@ -1,6 +1,8 @@
---
+title: "Debug logging"
sidebar_position: 9
sidebar_label: "Debug logging 🌐"
+description: Enable SDK debug logging to troubleshoot connectivity and media issues in web applications.
---
# Debug logging Web
diff --git a/docs/how-to/client/installation.mdx b/docs/how-to/client/installation.mdx
index fbbd5bc..6e0d597 100644
--- a/docs/how-to/client/installation.mdx
+++ b/docs/how-to/client/installation.mdx
@@ -1,5 +1,6 @@
---
sidebar_position: 1
+description: Install the Fishjam client SDK for React (web) or React Native (mobile).
---
import Tabs from "@theme/Tabs";
diff --git a/docs/how-to/client/list-other-peers.mdx b/docs/how-to/client/list-other-peers.mdx
index ba6dbcb..3f0b2b6 100644
--- a/docs/how-to/client/list-other-peers.mdx
+++ b/docs/how-to/client/list-other-peers.mdx
@@ -1,5 +1,6 @@
---
sidebar_position: 5
+description: Access and display media tracks from other peers and the local peer using the usePeers hook.
---
import Tabs from "@theme/Tabs";
diff --git a/docs/how-to/client/managing-devices.mdx b/docs/how-to/client/managing-devices.mdx
index d923a65..d40bb82 100644
--- a/docs/how-to/client/managing-devices.mdx
+++ b/docs/how-to/client/managing-devices.mdx
@@ -1,6 +1,7 @@
---
sidebar_position: 4
sidebar_label: "Managing devices"
+description: Select, switch, mute, and dynamically control camera and microphone devices.
---
import Tabs from "@theme/Tabs";
diff --git a/docs/how-to/client/migration-guide.mdx b/docs/how-to/client/migration-guide.mdx
index 891a6ec..069e674 100644
--- a/docs/how-to/client/migration-guide.mdx
+++ b/docs/how-to/client/migration-guide.mdx
@@ -1,4 +1,5 @@
---
+title: "0.25.x Migration Guide"
sidebar_position: 14
sidebar_label: "0.25.x Migration Guide 📱"
---
diff --git a/docs/how-to/client/picture-in-picture.mdx b/docs/how-to/client/picture-in-picture.mdx
index bee16f4..aae27bf 100644
--- a/docs/how-to/client/picture-in-picture.mdx
+++ b/docs/how-to/client/picture-in-picture.mdx
@@ -1,6 +1,8 @@
---
+title: "Picture in Picture"
sidebar_position: 11
sidebar_label: "Picture in Picture 📱"
+description: Display video in a floating PiP window when the user backgrounds the app on Android or iOS.
---
import Tabs from "@theme/Tabs";
diff --git a/docs/how-to/client/reconnection-handling.mdx b/docs/how-to/client/reconnection-handling.mdx
index 8d99882..ba7e659 100644
--- a/docs/how-to/client/reconnection-handling.mdx
+++ b/docs/how-to/client/reconnection-handling.mdx
@@ -1,6 +1,8 @@
---
+title: "Reconnect"
sidebar_position: 10
sidebar_label: "Reconnect 📱"
+description: Handle automatic reconnection to a Fishjam room after connection loss in React Native apps.
---
# Reconnect Mobile
diff --git a/docs/how-to/client/screensharing.mdx b/docs/how-to/client/screensharing.mdx
index 1c400c4..52ca09b 100644
--- a/docs/how-to/client/screensharing.mdx
+++ b/docs/how-to/client/screensharing.mdx
@@ -1,6 +1,8 @@
---
+title: "Screen sharing"
sidebar_position: 12
sidebar_label: "Screen sharing 📱"
+description: Stream mobile device screen content to other peers in React Native applications.
---
import Tabs from "@theme/Tabs";
diff --git a/docs/how-to/client/start-streaming.mdx b/docs/how-to/client/start-streaming.mdx
index a55b30c..f983907 100644
--- a/docs/how-to/client/start-streaming.mdx
+++ b/docs/how-to/client/start-streaming.mdx
@@ -1,5 +1,6 @@
---
sidebar_position: 2
+description: Initialize camera and microphone access and start streaming media in a Fishjam room.
---
import Tabs from "@theme/Tabs";
diff --git a/docs/how-to/client/stream-middleware.mdx b/docs/how-to/client/stream-middleware.mdx
index df6d8e9..714ab90 100644
--- a/docs/how-to/client/stream-middleware.mdx
+++ b/docs/how-to/client/stream-middleware.mdx
@@ -1,6 +1,8 @@
---
+title: "Stream middleware"
sidebar_position: 7
sidebar_label: "Stream middleware 🌐"
+description: Intercept and transform media tracks before sending them to Fishjam, enabling effects and custom encodings.
---
# Stream middleware Web
diff --git a/docs/how-to/features/audio-only-calls.mdx b/docs/how-to/features/audio-only-calls.mdx
index 17fca18..97d3369 100644
--- a/docs/how-to/features/audio-only-calls.mdx
+++ b/docs/how-to/features/audio-only-calls.mdx
@@ -1,5 +1,6 @@
---
type: how-to
+description: Create audio-only rooms and livestreams for voice-only use cases at a discounted cost.
---
import Tabs from "@theme/Tabs";
diff --git a/docs/how-to/features/sandbox-api-testing.mdx b/docs/how-to/features/sandbox-api-testing.mdx
index 0f62048..3c6d0b0 100644
--- a/docs/how-to/features/sandbox-api-testing.mdx
+++ b/docs/how-to/features/sandbox-api-testing.mdx
@@ -1,5 +1,6 @@
---
type: how-to
+description: Use the Sandbox API to create rooms and peers for testing without setting up your own backend server.
---
import Tabs from "@theme/Tabs";
diff --git a/docs/how-to/features/selective-subscriptions.mdx b/docs/how-to/features/selective-subscriptions.mdx
index 22d1c7a..3a356bc 100644
--- a/docs/how-to/features/selective-subscriptions.mdx
+++ b/docs/how-to/features/selective-subscriptions.mdx
@@ -1,6 +1,7 @@
---
type: how-to
title: Selective Subscriptions
+description: Configure manual subscription mode so your backend controls which peers receive which streams.
---
import Tabs from "@theme/Tabs";
diff --git a/docs/how-to/features/text-chat.mdx b/docs/how-to/features/text-chat.mdx
index b979571..6c85a25 100644
--- a/docs/how-to/features/text-chat.mdx
+++ b/docs/how-to/features/text-chat.mdx
@@ -1,6 +1,7 @@
---
type: how-to
title: Text Chat
+description: Implement peer-to-peer text chat in your application using Fishjam data channels.
---
import Tabs from "@theme/Tabs";
diff --git a/docs/how-to/features/whip-whep.mdx b/docs/how-to/features/whip-whep.mdx
index d7de8b0..8513493 100644
--- a/docs/how-to/features/whip-whep.mdx
+++ b/docs/how-to/features/whip-whep.mdx
@@ -1,6 +1,7 @@
---
type: how-to
title: WHIP/WHEP with Fishjam
+description: Publish and receive Fishjam livestreams directly using the WHIP and WHEP protocols.
---
import Tabs from "@theme/Tabs";
diff --git a/docs/tutorials/agents.mdx b/docs/tutorials/agents.mdx
index 6ddde34..be19b91 100644
--- a/docs/tutorials/agents.mdx
+++ b/docs/tutorials/agents.mdx
@@ -2,6 +2,7 @@
type: tutorial
sidebar_position: 4
title: Agents
+description: Introduction to Fishjam agents and how to implement them using server SDKs.
---
import Tabs from "@theme/Tabs";
diff --git a/docs/tutorials/backend-quick-start.mdx b/docs/tutorials/backend-quick-start.mdx
index 0087c9a..fb9a489 100644
--- a/docs/tutorials/backend-quick-start.mdx
+++ b/docs/tutorials/backend-quick-start.mdx
@@ -1,6 +1,7 @@
---
type: tutorial
sidebar_position: 2
+description: Set up a backend server to create rooms and manage peers for your Fishjam application.
---
import Tabs from "@theme/Tabs";
diff --git a/docs/tutorials/gemini-live-integration.mdx b/docs/tutorials/gemini-live-integration.mdx
index e4302b0..bd30bb2 100644
--- a/docs/tutorials/gemini-live-integration.mdx
+++ b/docs/tutorials/gemini-live-integration.mdx
@@ -2,6 +2,7 @@
type: tutorial
sidebar_position: 5
title: Gemini Live Integration
+description: Build a real-time speech-to-speech voice assistant using Fishjam and Google's Multimodal Live API.
---
import Tabs from "@theme/Tabs";
diff --git a/docs/tutorials/livestreaming.mdx b/docs/tutorials/livestreaming.mdx
index 25691d9..d096155 100644
--- a/docs/tutorials/livestreaming.mdx
+++ b/docs/tutorials/livestreaming.mdx
@@ -2,6 +2,7 @@
type: tutorial
sidebar_position: 3
title: Livestreaming
+description: Set up livestreaming with Fishjam, from sandbox prototyping to production deployment with server SDKs.
---
import Tabs from "@theme/Tabs";
diff --git a/docs/tutorials/react-native-quick-start.mdx b/docs/tutorials/react-native-quick-start.mdx
index e9a680a..04c7440 100644
--- a/docs/tutorials/react-native-quick-start.mdx
+++ b/docs/tutorials/react-native-quick-start.mdx
@@ -1,6 +1,7 @@
---
type: tutorial
sidebar_position: 0
+description: Step-by-step guide to integrating Fishjam into a React Native application with a working video streaming app.
---
import Tabs from "@theme/Tabs";
diff --git a/docs/tutorials/react-quick-start.mdx b/docs/tutorials/react-quick-start.mdx
index 5bac37a..9c1f3fe 100644
--- a/docs/tutorials/react-quick-start.mdx
+++ b/docs/tutorials/react-quick-start.mdx
@@ -1,6 +1,7 @@
---
type: tutorial
sidebar_position: 1
+description: Step-by-step guide to integrating Fishjam into a React web application with a working video streaming app.
---
import Tabs from "@theme/Tabs";
diff --git a/docusaurus.config.ts b/docusaurus.config.ts
index 8abe1b9..13076bb 100644
--- a/docusaurus.config.ts
+++ b/docusaurus.config.ts
@@ -339,6 +339,32 @@ const config: Config = {
...typedocConfig,
},
],
+ [
+ "docusaurus-plugin-llms",
+ {
+ generateLLMsTxt: true,
+ generateLLMsFullTxt: true,
+ processingBatchSize: 8,
+ title: "Fishjam Docs",
+ description:
+ "Fishjam is a multimedia streaming toolkit for building real-time video and audio applications with managed WebRTC infrastructure, client SDKs (React, React Native), and server SDKs (Node.js, Python).",
+ includeOrder: [
+ "tutorials/**/*.{md,mdx}",
+ "how-to/**/*.{md,mdx}",
+ "explanation/**/*.{md,mdx}",
+ "api/reference.{md,mdx}",
+ "api/mobile/index.{md,mdx}",
+ "api/web/index.{md,mdx}",
+ "api/server/index.{md,mdx}",
+ ],
+ ignoreFiles: ["**/type-aliases/**", "**/_common/**"],
+ includeUnmatchedLast: false,
+ excludeImports: true,
+ removeDuplicateHeadings: true,
+ rootContent:
+ "Curated index of Fishjam documentation. Start with Tutorials for quick starts, Explanation for concepts, How-to for guides, and API for SDK references.",
+ },
+ ],
],
};
diff --git a/package.json b/package.json
index 10267fd..c734199 100644
--- a/package.json
+++ b/package.json
@@ -58,6 +58,7 @@
"@google/genai": "^1.35.0",
"@shikijs/twoslash": "^3.6.0",
"cspell": "^9.1.2",
+ "docusaurus-plugin-llms": "^0.3.0",
"docusaurus-plugin-typedoc": "1.4.0",
"prettier": "^3.5.3",
"typedoc": "0.28.5",
diff --git a/yarn.lock b/yarn.lock
index 7c23e0e..2e5a5d9 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -8203,7 +8203,7 @@ __metadata:
languageName: node
linkType: hard
-"brace-expansion@npm:^2.0.1":
+"brace-expansion@npm:^2.0.1, brace-expansion@npm:^2.0.2":
version: 2.0.2
resolution: "brace-expansion@npm:2.0.2"
dependencies:
@@ -10256,6 +10256,19 @@ __metadata:
languageName: node
linkType: hard
+"docusaurus-plugin-llms@npm:^0.3.0":
+ version: 0.3.0
+ resolution: "docusaurus-plugin-llms@npm:0.3.0"
+ dependencies:
+ gray-matter: "npm:^4.0.3"
+ minimatch: "npm:^9.0.3"
+ yaml: "npm:^2.8.1"
+ peerDependencies:
+ "@docusaurus/core": ^3.0.0
+ checksum: 10c0/39b1284a512b2226330a1c39919a5087d7b7b482951478e0f26f16d62c2f05eee2585661635f6ac1636526f5c8de576066dc68a449253d86a9ebce93f6df2514
+ languageName: node
+ linkType: hard
+
"docusaurus-plugin-typedoc@npm:1.4.0":
version: 1.4.0
resolution: "docusaurus-plugin-typedoc@npm:1.4.0"
@@ -11348,6 +11361,7 @@ __metadata:
clsx: "npm:^2.0.0"
cspell: "npm:^9.1.2"
docusaurus-lunr-search: "npm:3.6.0"
+ docusaurus-plugin-llms: "npm:^0.3.0"
docusaurus-plugin-typedoc: "npm:1.4.0"
expo-camera: "npm:^16.1.8"
fastify: "npm:^5.4.0"
@@ -15232,6 +15246,15 @@ __metadata:
languageName: node
linkType: hard
+"minimatch@npm:^9.0.3":
+ version: 9.0.9
+ resolution: "minimatch@npm:9.0.9"
+ dependencies:
+ brace-expansion: "npm:^2.0.2"
+ checksum: 10c0/0b6a58530dbb00361745aa6c8cffaba4c90f551afe7c734830bd95fd88ebf469dd7355a027824ea1d09e37181cfeb0a797fb17df60c15ac174303ac110eb7e86
+ languageName: node
+ linkType: hard
+
"minimatch@npm:^9.0.4, minimatch@npm:^9.0.5":
version: 9.0.5
resolution: "minimatch@npm:9.0.5"
@@ -20970,6 +20993,15 @@ __metadata:
languageName: node
linkType: hard
+"yaml@npm:^2.8.1":
+ version: 2.8.2
+ resolution: "yaml@npm:2.8.2"
+ bin:
+ yaml: bin.mjs
+ checksum: 10c0/703e4dc1e34b324aa66876d63618dcacb9ed49f7e7fe9b70f1e703645be8d640f68ab84f12b86df8ac960bac37acf5513e115de7c970940617ce0343c8c9cd96
+ languageName: node
+ linkType: hard
+
"yargs-parser@npm:^21.0.0, yargs-parser@npm:^21.1.1":
version: 21.1.1
resolution: "yargs-parser@npm:21.1.1"