Docship Theme Development Checklist

⚠️ Critical Rules

No Advertisements Policy

Known themes/plugins with ads (DO NOT USE):

Framework Theme/Plugin Issue
VuePress @vuepress/theme-vue Contains sponsor/advertisement content

Recommended ad-free alternatives:

Framework Recommended Theme
VuePress Default theme (built-in @vuepress/theme-default)

User Content Respect

Markdown Compatibility

Docusaurus Configuration

VitePress Configuration

Sidebar Generation (VitePress)

Homepage Selection Logic

Priority order:

  1. docs/index.md or content/index.md - explicit homepage
  2. docs/README.md or content/README.md - common convention
  3. First .md file (sorted alphabetically) - fallback

GitHub Actions / Reusable Workflows

Content Backup

Build & Deploy

Shell Script Best Practices (GitHub Actions)

Logo & Branding

Testing Scenarios

Before releasing a theme, test with:

Starlight (Astro) Configuration

Rspress Configuration

Common Errors & Solutions

Error Cause Solution
navbar.logo.src is required Using logo without src Remove logo or add src
Could not parse expression with acorn MDX parsing ${} as JSX Use markdown.format: 'md'
workflow is not reusable Missing workflow_call trigger Add on: workflow_call
requesting pages: write but only allowed none Caller missing permissions Add permissions to caller
onBrokenMarkdownLinks deprecated Old config location Move to markdown.hooks
Found dead link (VitePress) Broken links in markdown Use ignoreDeadLinks: true
sidebar: 'auto' not working VitePress doesn't auto-generate Write custom sidebar script
Page Not Found on homepage Missing slug: / frontmatter Add frontmatter to first doc
here-document delimited by end-of-file Heredoc in YAML run block Use printf instead
social: Expected array, received object Starlight v0.33.0+ API change Use array format for social links
title: Required (Starlight) Missing frontmatter title Auto-add title from filename
slug does not exist (Starlight) Uppercase slug in sidebar Convert slug to lowercase
Entry docs → 404 was not found No valid index page Ensure index.md/mdx exists with frontmatter
item.items.map is not a function Rspress sidebar items: 'auto' Use array of items, not string
Failed to read favicon (Rspress) Wrong public directory path Put assets in docs/public/
Module not found: Can't resolve './assets/...' Invalid image path in markdown Set remarkImageOptions: false (Fumadocs) or staticImage: false (Nextra)
Unrecognized keys: "theme", "themeConfig" Nextra v4 API changed Use new nextra() config format
Export doesn't exist in target module Simplified source.ts missing exports Delete files that depend on removed exports (e.g., app/og, app/llms-full.txt)
fatal: No url found for submodule path Downloaded repo folder treated as submodule Add folder to .gitignore or git rm -r --cached folder
shallow cloned, latest modified time not presented GitHub Actions shallow clone Warning only, can ignore or use fetch-depth: 0
InvalidTocFile: not a valid TOC File (DocFX) Empty or malformed toc.yml Delete invalid toc.yml from subdirectories
Logo/favicon not showing (DocFX) External URL in _appLogoPath/_appFaviconPath Use custom template JS to inject external URLs
Homepage 404 (VuePress) Using index.md instead of README.md Rename index.md to README.md
sidebar: 'auto' not showing files (VuePress) VuePress auto only shows headings Generate sidebar config via Node.js script
Theme has ads/sponsors (VuePress) Using @vuepress/theme-vue Use default theme (built-in, no ads)
Prerendered 5 routes only (Docus) Nuxt can't crawl to doc pages Add routes to nitro.prerender.routes
404 on /docs/CHECKLIST (Docus) Uppercase filename in route Convert routes to lowercase
Blank page on root (Docus) index file without .html Create index.html redirect after build
@nuxtjs/mcp-toolkit not compatible (Docus) MCP needs server Warning only, can ignore
robots.txt with base URL error (Docus) robots module conflict Set robots: { robotsTxt: false }
No sidebar on homepage (Docus) content/index.md is landing page Put docs in content/1.docs/ subdirectory

Fumadocs Configuration

Nextra Configuration

VuePress Configuration

DocFX Configuration

Docute Configuration

mdBook Configuration

Eleventy Configuration

Sphinx Configuration

Docus Configuration

General Lessons Learned

Framework Categories

  1. Build-required frameworks (need npm install + build):

    • Docusaurus, VitePress, Starlight, Rspress, Fumadocs, Nextra
    • Need npm cache for faster builds
    • Output to specific directories (build/, dist/, out/, doc_build/)
  2. Pure frontend frameworks (no build, CDN-based):

    • Docsify, Docute
    • Just HTML + markdown files
    • Faster deployment, simpler setup
  3. Next.js-based frameworks:

    • Fumadocs, Nextra
    • Require output: 'export' for static build
    • Require images: { unoptimized: true } for static export
    • Use basePath for GitHub Pages subdirectory

Common Pitfalls

Branding Consistency

For all frameworks, implement:

Footer Format

All workflows must include a footer with attribution: Powered by NekoTick · {Framework}

Framework GitHub Link
Docusaurus https://github.com/facebook/docusaurus
VitePress https://github.com/vuejs/vitepress
Starlight https://github.com/withastro/starlight
Rspress https://github.com/web-infra-dev/rspress
Fumadocs https://github.com/fuma-nama/fumadocs
Nextra https://github.com/shuding/nextra
Docute https://github.com/egoist/docute
DocFX https://github.com/dotnet/docfx
Docsify https://github.com/docsifyjs/docsify
MkDocs Material https://github.com/squidfunk/mkdocs-material
VuePress https://github.com/vuejs/vuepress
mdBook https://github.com/rust-lang/mdBook
Eleventy https://github.com/11ty/eleventy
Hugo https://github.com/gohugoio/hugo
Sphinx https://github.com/sphinx-doc/sphinx
Docus https://github.com/nuxt-content/docus

Logo Implementation Patterns

Framework Logo Config
Docusaurus navbar.logo.src + navbar.title
VitePress themeConfig.logo + themeConfig.siteTitle
Fumadocs nav.title as JSX with <img> + <span>
Nextra Navbar logo prop as JSX
Docute logo as Vue template string
DocFX Custom template JS to replace #logo element
VuePress themeConfig.logo (external URL supported)
Starlight logo.src + title
Docus Custom AppHeaderLogo.vue with <NuxtLink> + <UColorModeImage> + <span>
Hugo params.BookLogo in hugo.yaml (external URL supported)

Sidebar Generation

Testing Checklist (Updated)

Multi-Language Support

Adding New Framework

When adding a new documentation framework to Docship:

1. Create Workflow File

2. Add Footer Attribution

Every framework MUST include a footer with: Powered by NekoTick · {Framework}

Footer implementation by framework type:

Framework Type Implementation Method
Docusaurus themeConfig.footer.copyright
VitePress themeConfig.footer.message
Docsify Plugin with hook.afterEach
Docute footer config option
Starlight Custom Footer.astro component
Rspress themeConfig.footer.message
MkDocs Material copyright in mkdocs.yml
HonKit JS injection in HTML files
DocFX _appFooter in globalMetadata
Fumadocs Footer element in app/layout.tsx
Nextra footer prop in Layout component
VuePress enhanceApp.js DOM injection
mdBook Custom theme/index.hbs or theme/head.hbs
Eleventy Custom layout template with footer
Sphinx Custom CSS in _static/custom.css
Docus footer.credits in app.config.ts
Hugo Custom partial layouts/partials/docs/inject/footer.html
Jekyll footer_content in _config.yml

3. Update Showcase

frameworks.json format:

{
  "framework-name": {
    "links": ["https://github.com/org/repo"]
  },
  "framework-with-theme": {
    "links": ["https://github.com/org/framework", "https://github.com/org/theme"]
  }
}

4. Update Documentation