Docusaurus Documentation Setup Guide
Overviewโ
This project uses Docusaurus v3 with TypeDoc integration to generate comprehensive documentation from TypeScript source code and standalone markdown files. The setup provides a unified documentation experience that includes:
- API Documentation: Auto-generated from TypeScript code using TypeDoc
- Project Documents: Architecture guides, development docs, and package documentation
- Integrated Search: Full-text search across all documentation
- Modern UI: Responsive design with dark mode support
Architectureโ
docs/
โโโ docusaurus/ # Docusaurus site configuration
โ โโโ docs/ # Generated documentation output
โ โโโ src/ # Custom pages and components
โ โโโ static/ # Static assets
โ โโโ docusaurus.config.ts # Main Docusaurus configuration
โ โโโ sidebars.ts # Sidebar configuration
โ โโโ typedoc.config.json # Standard TypeDoc configuration
โ โโโ typedoc.local.config.json # Local development configuration
โ โโโ tsconfig.typedoc.json # TypeScript configuration for TypeDoc
โโโ Architecture/ # Architecture documentation
โโโ Guides/ # Development guides
โโโ Packages/ # Package-specific documentation
โโโ TSDoc/ # TSDoc specification and examples
Configuration Filesโ
1. Docusaurus Configuration (docusaurus.config.ts
)โ
The main configuration file that sets up:
- Site metadata: Title, tagline, URL, and organization details
- Deployment settings: GitHub Pages deployment configuration
- Theme configuration: Navbar, footer, and color scheme
- Plugin configuration: Currently using standalone TypeDoc
- Markdown processing: MDX support with preprocessors
Key settings:
export default {
title: "Uptime Watcher",
url: "https://nick2bad4u.github.io",
baseUrl: "/Uptime-Watcher/",
organizationName: "Nick2bad4u",
projectName: "Uptime-Watcher",
// ... other configuration
};
2. Sidebar Configuration (sidebars.ts
)โ
Defines the navigation structure with TypeDoc integration:
// Import the TypeDoc-generated sidebar
const typedocSidebar = require('./docs/typedoc-sidebar.cjs');
const sidebars: SidebarsConfig = {
unifiedSidebar: [
// Project documents (from TypeDoc projectDocuments)
...typedocSidebar.items,
// API documentation sections
{ type: 'category', label: 'Frontend (React App)', ... },
{ type: 'category', label: 'Backend (Electron Main)', ... },
{ type: 'category', label: 'Shared Code', ... }
],
};
3. TypeDoc Configurationโ
Two configuration files provide flexibility:
typedoc.config.json
(Standard)โ
- Uses relative paths for cross-platform compatibility
- Configured for CI/CD environments
- Standard output directory:
docs
typedoc.local.config.json
(Development)โ
- Uses absolute paths for local development
- Optimized for Windows development environment
- Direct output to Docusaurus docs directory
Key TypeDoc settings:
{
"entryPointStrategy": "expand",
"entryPoints": [
"../../src/**/*.{ts,tsx}",
"../../electron/**/*.{ts,tsx}",
"../../shared/**/*.{ts,tsx}"
],
"plugin": [
"typedoc-plugin-remark",
"typedoc-plugin-missing-exports",
"typedoc-plugin-replace-text",
"typedoc-plugin-markdown",
"typedoc-plugin-mdn-links",
"typedoc-plugin-dt-links",
"typedoc-plugin-external-package-links",
"typedoc-plugin-rename-defaults",
"typedoc-plugin-coverage",
"typedoc-docusaurus-theme"
],
"projectDocuments": [
"../../docs/Architecture/**/*.md",
"../../docs/Guides/**/*.md",
"../../docs/Packages/**/*.md",
"../../docs/TSDoc/**/*.md",
"../../docs/*.md"
]
}
4. TypeScript Configuration (tsconfig.typedoc.json
)โ
Specialized TypeScript configuration for documentation generation:
- Target: ESNext for modern JavaScript features
- Module resolution: Bundler strategy for modern imports
- Path mapping: Aliases for
@shared/*
,@electron/*
,@app/*
- Includes: All TypeScript/JavaScript files in src, electron, shared
- Excludes: Test files, build outputs, and development artifacts
Project Documents Integrationโ
The projectDocuments
feature in TypeDoc allows including standalone markdown files alongside API documentation. These documents are:
- Automatically discovered from configured glob patterns
- Processed by TypeDoc with full markdown support
- Integrated into sidebar via the generated
typedoc-sidebar.cjs
- Cross-linked with API documentation using TypeDoc's link resolution
Document Categoriesโ
- Architecture/: ADRs, patterns, templates, and architectural decisions
- Guides/: Development guides, testing methodology, and feature guides
- Packages/: Third-party package documentation and examples
- TSDoc/: TypeScript documentation standards and examples
- Root level: High-level project documentation
Build Processโ
1. Development Workflowโ
# Start Docusaurus development server
npm run docs:dev
# Generate TypeDoc documentation
npm run docs:typedoc
# Build static site
npm run docs:build
2. Generation Stepsโ
-
TypeDoc Generation:
- Parses TypeScript source files
- Processes project documents from markdown files
- Generates unified documentation in
docs/
directory - Creates
typedoc-sidebar.cjs
with navigation structure
-
Docusaurus Build:
- Imports TypeDoc-generated content
- Applies Docusaurus theme and navigation
- Generates static HTML with search indexing
- Optimizes assets for deployment
3. Deploymentโ
The documentation is deployed to GitHub Pages via:
- Base URL:
/Uptime-Watcher/
- Organization:
Nick2bad4u
- Repository:
Uptime-Watcher
- Branch:
gh-pages
Key Featuresโ
1. Unified Navigationโ
The sidebar integrates:
- Project documentation (from markdown files)
- API documentation (from TypeScript source)
- Cross-references between different documentation types
2. Advanced Searchโ
Powered by Docusaurus search with:
- Full-text search across all documentation
- Category-specific search boosts
- Document type filtering
3. Enhanced Linkingโ
- Internal links: Automatic resolution between documents
- API links: TypeDoc's
{@link}
tags for API references - External links: Configured mappings for third-party documentation
4. Content Processingโ
- Text replacement: Automatic formatting of TODO/FIXME comments
- Code examples: Syntax highlighting with multiple language support
- Media handling: Automatic copying and linking of images/assets
Customizationโ
Adding New Document Categoriesโ
- Create new directory under
docs/
- Add glob pattern to
projectDocuments
in TypeDoc configuration - Documents will automatically appear in generated sidebar
Modifying Sidebar Structureโ
The sidebar structure is controlled by:
- TypeDoc generation: Creates base navigation from projectDocuments
- Sidebar configuration: Adds custom categories and ordering
- Category options: Collapse/expand behavior and labeling
Theme Customizationโ
Customize appearance via:
src/css/custom.css
: Global style overrides- Theme configuration in
docusaurus.config.ts
- Custom React components in
src/components/
Best Practicesโ
1. Documentation Organizationโ
- Group related documents in appropriate directories
- Use consistent naming conventions for files and headings
- Include frontmatter in markdown files for better organization
2. Cross-Referencingโ
- Use TypeDoc links (
{@link ClassName}
) for API references - Use relative links for document-to-document references
- Test link resolution during build process
3. Content Guidelinesโ
- Write clear headings for automatic table of contents generation
- Include code examples with proper syntax highlighting
- Use consistent terminology across all documentation
Troubleshootingโ
Common Issuesโ
- Missing sidebar items: Check TypeDoc projectDocuments configuration
- Broken links: Verify relative paths and TypeDoc link syntax
- Build failures: Review TypeScript configuration and exclude patterns
- Search not working: Ensure proper indexing and search configuration
Debug Commandsโ
# Validate TypeDoc configuration
npx typedoc --help
# Check TypeScript compilation
npm run type-check:all
# Validate Docusaurus configuration
npm run docs:build --verbose
# Clear caches
npm run docs:clear
Scripts Referenceโ
Available npm scripts for documentation:
docs:dev
- Start development serverdocs:build
- Build static documentationdocs:serve
- Serve built documentation locallydocs:typedoc
- Generate TypeDoc documentation onlydocs:clear
- Clear Docusaurus build cachedocs:preview
- Preview built documentation
This setup provides a comprehensive documentation solution that grows with the project while maintaining consistency and discoverability across all documentation types.