Skip to content

docs: add Fumadocs documentation site - #448

Open
xoriuz wants to merge 1 commit into
gnoviawan:devfrom
Ficky-Dev:docs/fumadocs-foundation
Open

docs: add Fumadocs documentation site#448
xoriuz wants to merge 1 commit into
gnoviawan:devfrom
Ficky-Dev:docs/fumadocs-foundation

Conversation

@xoriuz

@xoriuz xoriuz commented Jul 25, 2026

Copy link
Copy Markdown

Summary

  • Add a standalone Fumadocs documentation app for public, task-oriented Termul guides.
  • Provide an installation and first-workspace guide instead of sending new users directly into internal architecture documentation.
  • Prepare static Cloudflare Pages deployment while keeping the landing Docs link unchanged until docs.termul.dev is provisioned.

Related Issue

Closes #447

Searched open and closed pull requests for Fumadocs, docs.termul.dev, and a public documentation site. No duplicate implementation was found. Existing documentation issues #254, #353, and #356 cover README feature coverage, missing ADRs, and internal ACP architecture respectively, not this public docs site.

Type of Change

  • feat: new feature
  • fix: bug fix
  • docs: documentation only
  • style: formatting or non-functional styling changes
  • refactor: internal cleanup with no behavior change
  • perf: performance improvement
  • test: adds or updates tests
  • build: build or dependency changes
  • ci: CI/CD workflow changes
  • chore: maintenance or tooling
  • revert: reverts a previous change

What Changed

  • Added website-docs/, a Fumadocs + React Router static documentation app.
  • Added MDX content loading, local Orama search, static page generation, and LLM-readable endpoints.
  • Added the initial Install Termul guide for macOS, Windows, Linux, and first project setup.
  • Added website-docs/PLAN.md with the proposed user documentation roadmap and contribution rules.
  • Added root scripts for docs development, linting, type checking, and building.
  • Added .github/workflows/deploy-docs.yml for Cloudflare Pages validation and deployment.
  • Added a termul-docs Wrangler configuration and SPA fallback routing.
  • Kept the landing Docs URL pointed at GitHub until the Cloudflare Pages project and docs.termul.dev domain are confirmed live.

Maintainer infrastructure required before production deployment:

  • Cloudflare Pages project named termul-docs
  • custom domain docs.termul.dev
  • existing Cloudflare repository secrets authorized for the new Pages project

How It Was Tested

  • bun run ci (Biome lint + format + imports, strict mode)
  • bun run typecheck
  • bun run test
  • cargo clippy --all-targets -- -D warnings (in src-tauri)
  • cargo test (in src-tauri)
  • Manual verification completed
  • Not applicable

Additional docs checks:

  • bun run docs:lint passed
  • bun run docs:typecheck passed
  • bun run docs:build passed
  • git diff --check passed
  • Static output verified for /, /docs, local search data, llms.txt, page Markdown output, and SPA fallback

Renderer tests: 195 files passed, 1 skipped; 2,204 tests passed, 42 skipped.

Rust checks are currently blocked on the unchanged upstream dev source by an existing syntax error:

src-tauri/src/worktree/mod.rs:1320:1
unexpected closing delimiter: `}`

Both cargo clippy --all-targets -- -D warnings and cargo test stop at that same parse error. This PR does not modify src-tauri/src/worktree/mod.rs or any Rust source.

Screenshots or Recordings

The docs shell and installation page were manually verified through the local development server and production static build. A hosted preview depends on the Cloudflare Pages project being provisioned by a maintainer.

CI & Review Gate

  • All CI checks pass (PR Validation, Rust Checks, Build Verification, Security Scans)
  • Code review comments from CodeRabbit / Claude have been addressed or resolved
  • No unresolved review findings remain

Checklist

  • My PR title follows the conventional commit format used by this repo
  • I linked the related issue or explained why none exists
  • I updated docs when needed
  • I added or updated tests when needed
  • I verified the change does not introduce unrelated modifications
  • I read AGENTS.md and followed the contributor guidelines
  • A human reviewed the complete diff before submission

Summary by CodeRabbit

  • New Features

    • Introduced a public documentation website with installation guidance and a first-workspace walkthrough.
    • Added searchable documentation with navigation, page metadata, markdown downloads, and GitHub viewing links.
    • Added machine-readable documentation endpoints for AI and automation tools.
    • Added local development, validation, preview, and production build commands.
  • Documentation

    • Added documentation standards, contribution guidance, and a phased content roadmap.
  • Chores

    • Automated documentation validation and deployment to Cloudflare Pages.

@coderabbitai

coderabbitai Bot commented Jul 25, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

Adds a standalone Fumadocs and React Router documentation site with installation content, static prerendering, search, LLM endpoints, SPA fallbacks, local tooling, and Cloudflare Pages deployment automation.

Changes

Public documentation site

Layer / File(s) Summary
Documentation project foundation
website-docs/package.json, website-docs/tsconfig.json, website-docs/vite.config.ts, website-docs/PLAN.md, website-docs/source.config.ts
Defines the private ESM docs project, TypeScript/Vite/Fumadocs configuration, shared styling and constants, and the planned documentation structure and contribution workflow.
MDX content and prerendering
website-docs/app/lib/source.ts, website-docs/app/routes/docs.tsx, website-docs/react-router.config.ts, website-docs/content/docs/index.mdx
Loads MDX content, prerenders documentation and markdown routes, renders Fumadocs pages, and adds installation and first-workspace instructions.
Application shell and navigation
website-docs/app/root.tsx, website-docs/app/routes.ts, website-docs/app/routes/home.tsx, website-docs/app/routes/not-found.tsx
Adds the document layout, error handling, home and not-found pages, shared navigation, and route configuration.
Search and LLM endpoints
website-docs/app/components/search.tsx, website-docs/app/routes/search.ts, website-docs/app/llms/*
Adds Orama-backed search plus generated index, full-text, and per-page markdown endpoints.
Validation and Cloudflare deployment
.github/workflows/deploy-docs.yml, package.json, website-docs/README.md, website-docs/wrangler.toml, website-docs/serve.json, website-docs/public/_redirects
Adds docs scripts and setup instructions, SPA fallback configuration, Cloudflare Pages settings, and CI validation/deployment automation.

Estimated code review effort: 4 (Complex) | ~45 minutes

Sequence Diagram(s)

sequenceDiagram
  participant Browser
  participant DocsRoute
  participant FumadocsSource
  participant DocsPage
  Browser->>DocsRoute: request /docs/*
  DocsRoute->>FumadocsSource: load page by slug
  FumadocsSource-->>DocsRoute: page tree and metadata
  DocsRoute->>DocsPage: render MDX content
  DocsPage-->>Browser: documentation page
Loading
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly matches the main change: adding a Fumadocs documentation site.
Linked Issues check ✅ Passed The PR delivers a standalone Fumadocs site with static prerendering, search, install guides, docs scripts, and Cloudflare deployment as requested.
Out of Scope Changes check ✅ Passed No clear unrelated changes are present; the added docs app, content, config, and deployment files all support the public documentation site.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Warning

There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure.

🔧 ESLint

If the error stems from missing dependencies, add them to the package.json file. For unrecoverable errors (e.g., due to private dependencies), disable the tool in the CodeRabbit configuration.

ESLint install failed. For unrecoverable errors, disable the tool in CodeRabbit configuration.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.github/workflows/deploy-docs.yml:
- Line 65: Update the Wrangler command in the deploy workflow to use an
intermediate environment variable for the selected branch instead of
interpolating github.head_ref or other GitHub branch context directly. Define
the existing branch-selection expression under env, then quote that environment
variable in the command so Wrangler receives it as a single argument and shell
injection is avoided.

In `@website-docs/content/docs/index.mdx`:
- Around line 19-23: Replace the direct piped execution of the mutable
main-branch installer in the documentation’s installer instructions with a
version-pinned download flow. In the “Or use the installer script” section,
instruct users to download the versioned installer, independently verify its
checksum or signature, and execute the verified local file; update the repeated
command block as well.

In `@website-docs/react-router.config.ts`:
- Around line 17-22: Update the prerender path construction in the route
configuration to include the API search route, both LLM text routes, and the
generated llms.mdx documentation paths alongside the existing documentation
URLs. Ensure these routes are returned in the prerender paths so their loaders
execute during the build.

In `@website-docs/README.md`:
- Line 26: Update the deployment statement in the README to use future-tense
wording or explicitly mark https://docs.termul.dev as pending, avoiding any
claim that the custom domain is currently live.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: d4b8035e-cff1-479b-9f07-7402f2e9fa47

📥 Commits

Reviewing files that changed from the base of the PR and between 276f6db and d329d41.

⛔ Files ignored due to path filters (2)
  • website-docs/bun.lock is excluded by !**/*.lock
  • website-docs/public/favicon.ico is excluded by !**/*.ico
📒 Files selected for processing (31)
  • .github/workflows/deploy-docs.yml
  • package.json
  • website-docs/.gitignore
  • website-docs/PLAN.md
  • website-docs/README.md
  • website-docs/app/app.css
  • website-docs/app/components/mdx.tsx
  • website-docs/app/components/search.tsx
  • website-docs/app/lib/cn.ts
  • website-docs/app/lib/layout.shared.tsx
  • website-docs/app/lib/shared.ts
  • website-docs/app/lib/source.ts
  • website-docs/app/llms/full.ts
  • website-docs/app/llms/index.ts
  • website-docs/app/llms/mdx.ts
  • website-docs/app/root.tsx
  • website-docs/app/routes.ts
  • website-docs/app/routes/docs.tsx
  • website-docs/app/routes/home.tsx
  • website-docs/app/routes/not-found.tsx
  • website-docs/app/routes/search.ts
  • website-docs/content/docs/index.mdx
  • website-docs/package.json
  • website-docs/postcss.config.js
  • website-docs/public/_redirects
  • website-docs/react-router.config.ts
  • website-docs/serve.json
  • website-docs/source.config.ts
  • website-docs/tsconfig.json
  • website-docs/vite.config.ts
  • website-docs/wrangler.toml

apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
workingDirectory: website-docs
command: pages deploy build/client --project-name=termul-docs --branch=${{ github.ref_name == 'main' && 'main' || github.head_ref || github.ref_name }} --commit-dirty=true

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/usr/bin/env bash
set -euo pipefail

workflow=".github/workflows/deploy-docs.yml"

if rg -n --pcre2 '\$\{\{[^}]*github\.(head_ref|ref_name)[^}]*\}\}.*--branch' "$workflow"; then
  echo "Untrusted branch context is still interpolated into the command" >&2
  exit 1
fi

rg -n -- 'DEPLOY_BRANCH|--branch="\$DEPLOY_BRANCH"' "$workflow"

Repository: gnoviawan/termul

Length of output: 154


🏁 Script executed:

#!/usr/bin/env bash
set -euo pipefail

echo "--- workflow excerpt ---"
sed -n '1,120p' .github/workflows/deploy-docs.yml | cat -n

echo
echo "--- trigger and pr references ---"
rg -n -- 'pull_request|github\.head_ref|github\.ref_name|pages deploy|wrangler|cloudflare' .github/workflows/deploy-docs.yml .github/workflows || true

echo
echo "--- surrounding repository action usage ---"
fd -a .github/workflows .github/workflows -x sh -c 'echo "### $1"; sed -n "1,120p" "$1"' sh {}

Repository: gnoviawan/termul

Length of output: 5969


🏁 Script executed:

#!/usr/bin/env bash
set -euo pipefail

echo "--- locked wrangler-action commit availability/annotations ---"
GITHUB_TOKEN="$GITHUB_TOKEN" gh api repos/cloudflare/wrangler-action/git/refs/tags/v3.15.0 | jq -r '
  "\ttag ref type=\(.object.type) sha=\(.object.sha)",
  if .object.type == "tag" then
    "\ttarget tag object:" + (gh api "repos/cloudflare/wrangler-action/git/tags/\(.object.sha)" | jq -r "\t\ttype=\(.object.type) sha=\(.object.sha)") // ""
  else
    "\ttarget commit: \(.object.sha)"
  end
' || true

echo
THAT_SHA="9acf94ace14e7dc412b076f2c5c20b8ce93c79cd"
echo "--- locked action metadata/files ---"
gh api "repos/cloudflare/wrangler-action/contents/action.yml?ref=${THAT_SHA}" | jq '.content' | base64 -d | cat -n
gh api "repos/cloudflare/wrangler-action/contents/src/action.mjs?ref=${THAT_SHA}" | jq '.content' | base64 -d | sed -n '1,220p' | cat -n

Repository: gnoviawan/termul

Length of output: 627


🌐 Web query:

cloudflare wrangler-action v3 command implementation command executable shell

💡 Result:

The cloudflare/wrangler-action executes commands within a GitHub Actions environment using a shell-based execution model [1]. When you provide a custom command via the command, preCommands, or postCommands inputs, the action processes these commands through its internal execution logic [2][3]. For commands defined in preCommands and postCommands, the action uses the execShell function, which determines how to invoke the command [1]. If a command string begins with "wrangler", the action automatically prefixes it with the configured package manager's execution command (e.g., npx wrangler, pnpm wrangler) [1]. If the command does not start with "wrangler", it is executed directly as a shell command in the specified working directory [1]. For the primary command input (which defaults to "deploy"), the action handles execution through a dedicated wranglerCommands function [2][1]. This function: 1. Orchestrates the execution by prepending the package manager's execution path (e.g., npx) and the wrangler CLI prefix [1]. 2. Optionally injects environment flags (--env) and variable bindings (--var) based on your workflow configuration [1]. 3. Executes the resulting command string using the underlying GitHub Actions toolkit exec function [1]. 4. Captures stdout and stderr streams, which are then exposed as GitHub Action outputs (command-output and command-stderr) for use in subsequent steps [1][3]. In essence, while the primary command input is structured to specifically facilitate Wrangler operations, the preCommands and postCommands inputs provide a mechanism for running arbitrary shell commands alongside your deployment process [2][1][3].

Citations:


Do not interpolate GitHub branch context directly into Wrangler's command.

This workflow runs on PRs, so github.head_ref can contain attacker-controlled repository names. Pass the selected branch through an intermediate env value and quote it in command so Wrangler receives an argument rather than a shell-injective context.

Proposed fix
+        env:
+          DEPLOY_BRANCH: ${{ github.ref_name == 'main' && 'main' || github.head_ref || github.ref_name }}
         with:
-          command: pages deploy build/client --project-name=termul-docs --branch=${{ github.ref_name == 'main' && 'main' || github.head_ref || github.ref_name }} --commit-dirty=true
+          command: pages deploy build/client --project-name=termul-docs --branch="$DEPLOY_BRANCH" --commit-dirty=true
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
command: pages deploy build/client --project-name=termul-docs --branch=${{ github.ref_name == 'main' && 'main' || github.head_ref || github.ref_name }} --commit-dirty=true
env:
DEPLOY_BRANCH: ${{ github.ref_name == 'main' && 'main' || github.head_ref || github.ref_name }}
with:
command: pages deploy build/client --project-name=termul-docs --branch="$DEPLOY_BRANCH" --commit-dirty=true
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/deploy-docs.yml at line 65, Update the Wrangler command in
the deploy workflow to use an intermediate environment variable for the selected
branch instead of interpolating github.head_ref or other GitHub branch context
directly. Define the existing branch-selection expression under env, then quote
that environment variable in the command so Wrangler receives it as a single
argument and shell injection is avoided.

Source: MCP tools

Comment on lines +19 to +23
Or use the installer script:

```bash
curl -fsSL https://raw.githubusercontent.com/gnoviawan/termul/main/scripts/install.sh | bash
```

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔒 Security & Privacy | 🟠 Major | 🏗️ Heavy lift

Do not execute an unpinned remote script directly.

Both commands execute whatever main/scripts/install.sh serves at install time. Publish a versioned installer with an independently verifiable checksum/signature, then instruct users to download, verify, and run it locally. The current installer does verify release assets, but the bootstrap script itself remains mutable and unverified. (raw.githubusercontent.com)

Also applies to: 31-35

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@website-docs/content/docs/index.mdx` around lines 19 - 23, Replace the direct
piped execution of the mutable main-branch installer in the documentation’s
installer instructions with a version-pinned download flow. In the “Or use the
installer script” section, instruct users to download the versioned installer,
independently verify its checksum or signature, and execute the verified local
file; update the repeated command block as well.

Comment on lines +17 to +22
for await (const entry of glob('**/*.mdx', { cwd: 'content/docs' })) {
const slugs = getSlugs(entry)
paths.push(getUrl(slugs), `/llms.mdx/docs/${[...slugs, 'content.md'].join('/')}`)
}

return paths

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== locate config and routes =="
git ls-files | rg '(^|/)react-router\.config\.ts$|(^|/)routes\.ts$|website-docs' || true

echo
echo "== react-router config =="
if [ -f website-docs/react-router.config.ts ]; then
  cat -n website-docs/react-router.config.ts
fi

echo
echo "== app routes files =="
fd -a 'routes\.ts$' website-docs 2>/dev/null || true

echo
echo "== package refs =="
for f in package.json website-docs/package.json pnpm-lock.yaml package-lock.json yarn.lock; do
  [ -f "$f" ] && echo "--- $f" && (rg -n '"react-router"|react-router|react-router-dom|vite-plugin-ssr|vercel|pages' "$f" || true)
done

Repository: gnoviawan/termul

Length of output: 2463


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== app/routes.ts =="
cat -n website-docs/app/routes.ts

echo
echo "== llms/search route handlers =="
for f in website-docs/app/routes/search.ts website-docs/app/llms/index.ts website-docs/app/llms/mdx.ts website-docs/app/llms/full.ts; do
  if [ -f "$f" ]; then
    echo "--- $f"
    cat -n "$f" | awk '{printf "%4d  %s\n", NR, $0}'
  else
    echo "--- missing $f"
  fi
done

echo
echo "== server api refs/search handlers =="
rg -n "api/search|/api/search|handler\(|loader\(|action\(|export .*handler|llms|llms-full|llms.txt" website-docs/app website-docs/public website-docs/vite.config.ts website-docs/react-router.config.ts || true

Repository: gnoviawan/termul

Length of output: 3629


🌐 Web query:

React Router v8 ssr false prerender output static routes loaders server-side rendered routes

💡 Result:

In React Router v8, setting ssr: false in your configuration file disables runtime server-side rendering, effectively putting the application into "SPA Mode" by default [1][2]. However, you can still leverage static pre-rendering while keeping ssr: false to generate static HTML and data for specific routes at build time [1][3]. When ssr: false is configured: 1. SPA Mode (Default): If you do not provide a prerender configuration, React Router renders only the root route into a single index.html file at build time [1][2]. In this mode, you can use a loader in the root route, but you cannot use loaders in any other routes because the application determines which child routes to load only after hydrating in the browser [1][3]. 2. Pre-rendering with ssr: false: If you want to use loaders in routes other than the root, you must explicitly configure pre-rendering [1][3]. By defining routes to be pre-rendered, React Router will execute the associated loaders at build time to generate static HTML and data payloads for those specific paths [1][4][5]. Important Constraints: - Prohibited Functions: You cannot use actions or headers functions in any routes when ssr: false is set, as there is no runtime server available to execute them [1][3]. - SSR-Safe Code: Even with ssr: false, your application code must remain "SSR-safe" (i.e., avoiding browser-only APIs like window during initial render) because React Router performs an initial render of the root route at build time [2][6]. - Loaders: When using pre-rendering with ssr: false, loaders are permitted on any route explicitly matched by your pre-rendering configuration [3]. If a pre-rendered route has child routes, you must ensure that parent loader data can be determined at runtime by either pre-rendering the child routes or using clientLoader to handle data loading on the client [3]. You can configure these settings in your react-router.config.ts file [1][4]: export default { ssr: false, // Disables runtime SSR prerender: true, // Example: pre-renders all static routes defined in your routes } satisfies Config;

Citations:


Prerender the API and LLM routes.

With ssr: false, non-root loaders run only for routes listed in prerender.paths; otherwise the app runs in SPA mode and /api/search, /llms.txt, /llms-full.txt, and llms.mdx/docs/* will not get pre-rendered loader payloads.

Proposed fix
     for (const path of getStaticPaths()) {
       if (!excluded.includes(path)) paths.push(path)
     }

+    paths.push('/api/search', '/llms.txt', '/llms-full.txt', '/llms.mdx/docs/**')
+
     for await (const entry of glob('**/*.mdx', { cwd: 'content/docs' })) {
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@website-docs/react-router.config.ts` around lines 17 - 22, Update the
prerender path construction in the route configuration to include the API search
route, both LLM text routes, and the generated llms.mdx documentation paths
alongside the existing documentation URLs. Ensure these routes are returned in
the prerender paths so their loaders execute during the build.

Comment thread website-docs/README.md

Write public documentation in `content/docs/`. Each `.mdx` file becomes a page under `/docs`.

The app deploys to `https://docs.termul.dev`. Cloudflare Pages must be configured with the `termul-docs` project and `website-docs/build/client` as its build output directory.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Avoid presenting the custom domain as live before provisioning.

The PR objectives state that the Pages project and custom domain are not provisioned yet, but Line 26 says the app deploys there. Change this to “will deploy” or mark the domain as pending to avoid sending contributors to a dead URL.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@website-docs/README.md` at line 26, Update the deployment statement in the
README to use future-tense wording or explicitly mark https://docs.termul.dev as
pending, avoiding any claim that the custom domain is currently live.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

docs: add a public documentation site for installation and user guides

1 participant