# Documentation Systems & Infrastructure ## Static Site Generators ### Docusaurus (Meta) ```bash # Setup npx create-docusaurus@latest docs classic cd docs && npm start # Structure docs/ ├── docs/ # Documentation pages ├── blog/ # Blog posts ├── src/ │ └── pages/ # Custom pages └── docusaurus.config.js ``` **docusaurus.config.js:** ```javascript module.exports = { title: "My API", tagline: "Build amazing things", url: "https://docs.example.com", baseUrl: "/", themeConfig: { navbar: { items: [ { to: "/docs/intro", label: "Docs", position: "left" }, { to: "/api", label: "API", position: "left" }, ], }, // Algolia search algolia: { apiKey: "YOUR_API_KEY", indexName: "your_index", contextualSearch: true, }, prism: { theme: lightCodeTheme, darkTheme: darkCodeTheme, additionalLanguages: ["python", "rust"], }, }, } ``` ### MkDocs (Python) ```yaml # mkdocs.yml site_name: My API Documentation theme: name: material features: - navigation.tabs - navigation.sections - toc.integrate - search.suggest - search.highlight palette: - scheme: default toggle: icon: material/brightness-7 name: Switch to dark mode - scheme: slate toggle: icon: material/brightness-4 name: Switch to light mode plugins: - search - mkdocstrings: handlers: python: options: show_source: true - git-revision-date-localized markdown_extensions: - pymdownx.highlight - pymdownx.superfences - admonition - codehilite nav: - Home: index.md - Getting Started: getting-started.md - API Reference: api/ ``` ### VitePress (Vue) ```typescript // .vitepress/config.ts export default defineConfig({ title: "API Docs", description: "Developer documentation", themeConfig: { nav: [ { text: "Guide", link: "/guide/" }, { text: "API", link: "/api/" }, ], sidebar: { "/guide/": [ { text: "Introduction", items: [ { text: "Getting Started", link: "/guide/getting-started" }, { text: "Configuration", link: "/guide/config" }, ], }, ], }, search: { provider: "local", }, editLink: { pattern: "https://github.com/user/repo/edit/main/docs/:path", }, }, }) ``` ## Multi-Version Documentation ### Version Switcher ```javascript // Docusaurus versions { versions: { current: { label: '2.0 (Next)', path: 'next', }, }, onlyIncludeVersions: ['current', '1.5', '1.4'], } ``` ### Migration Guides ````markdown # Migration Guide: v1 to v2 ## Breaking Changes ### Authentication **v1:** ```python client.authenticate(api_key) ``` ```` **v2:** ```python client = Client(api_key=api_key) # Pass in constructor ``` ### Renamed Methods | v1 | v2 | Notes | | --------------- | --------------- | --------------- | | `get_user()` | `fetch_user()` | Async now | | `delete_user()` | `remove_user()` | Returns Promise | ## Deprecation Timeline - v1.x: Supported until Dec 2025 - v2.0: Released Jan 2025 - v2.1: Current (June 2025) ```` ## Search Implementation ### Algolia DocSearch ```html ```` ### Local Search (Lunr.js) ```javascript const idx = lunr(function () { this.ref("id") this.field("title", { boost: 10 }) this.field("content") documents.forEach((doc) => this.add(doc)) }) // Search const results = idx.search("authentication") ``` ## Documentation Testing ### Link Checking ```bash # linkcheck (Python) pip install linkchecker linkchecker http://localhost:3000/docs # broken-link-checker (Node) npm install -g broken-link-checker blc http://localhost:3000 -ro ``` ### Code Example Testing ```python # doctest for Python examples """ >>> add(2, 3) 5 >>> add(-1, 1) 0 """ # Run tests python -m doctest -v docs/*.md ``` ```javascript // Jest for TypeScript examples // Extract code blocks and test import { runExamples } from "./test-docs" test("API examples work", async () => { const examples = extractExamples("./docs/api.md") await expect(runExamples(examples)).resolves.toBeTruthy() }) ``` ## Performance Optimization ### Build Optimization ```javascript // Webpack/Vite config export default { build: { rollupOptions: { output: { manualChunks: { vendor: ["react", "react-dom"], }, }, }, }, optimizeDeps: { include: ["prismjs"], }, } ``` ### CDN & Caching ```nginx # nginx.conf location /docs { expires 1y; add_header Cache-Control "public, immutable"; } location ~* \.(html)$ { expires 1h; add_header Cache-Control "public, must-revalidate"; } ``` ## Analytics Integration ### Google Analytics ```javascript // Docusaurus gtag: { trackingID: 'G-XXXXXXXXXX', anonymizeIP: true, }, ``` ### Custom Analytics ```javascript // Track search queries function trackSearch(query, results) { analytics.track("docs_search", { query, resultCount: results.length, timestamp: new Date(), }) } ``` ## Quick Reference | Tool | Best For | Tech Stack | | ---------- | ----------------------------- | -------------- | | Docusaurus | React projects, versioning | React, MDX | | MkDocs | Python projects, simple setup | Python, Jinja2 | | VitePress | Vue projects, fast builds | Vue, Vite | | Nextra | Next.js integration | React, Next.js | | Mintlify | Modern UI, AI search | React | | Search Solution | Cost | Features | | ----------------- | ---------------- | ------------------- | | Algolia DocSearch | Free (OSS) | Fast, typo-tolerant | | Local (Lunr.js) | Free | Offline, no server | | Typesense | Free (self-host) | Privacy-focused | | Meilisearch | Free (self-host) | Fast, relevance |