Skip to content

Rewrite the documentation and add a documentation website - #155

Merged
Moritz Mazetti (Radiergummi) merged 15 commits into
mainfrom
docs/overhaul
Oct 29, 2026
Merged

Moritz Mazetti (Radiergummi) merged 15 commits into
mainfrom
docs/overhaul

Conversation

@Radiergummi

Copy link
Copy Markdown
Member

Rewrites tslink's user documentation and publishes it as a website at https://matchory.github.io/tslink/.

What changes

  • Voice. docs/STYLE.md replaces the Simplified Technical English rules with a direct, second-person voice that gives the reason next to the fact and names limits plainly. Every user page is rewritten in it: the tutorial, 7 guides, 7 reference pages, 4 explanation pages, examples/README.md, plus docs/README.md and parts of CONTRIBUTING.md.
  • README. It now opens with why tslink exists, positioned as the Docker/Swarm counterpart of Tailscale's Kubernetes operator. It adds a diagram (docs/images/overview.svg), a comparison with the alternatives (sidecar, host Tailscale, tsnet), what tslink doesn't do, and an "independent project, not affiliated with Tailscale" line.
  • Website. website/ is an Astro site adapted from cetacean's, built from docs/ under the /tslink base path. It has search, light and dark themes, Markdown copies of each page, llms.txt and a sitemap. It publishes only getting-started.md, guides/, reference/ and explanation/, so the style guide, specs and any local files stay off it.
  • Link checks. website/scripts/check-links.ts (8 tests) checks the built site, its Markdown copies and the repository's Markdown as GitHub renders it, anchors included.
  • CI. .github/workflows/pages.yml lints, type-checks, builds and checks links on every PR that touches docs, the site or any Markdown. It deploys only from main or on manual dispatch. GitHub Pages is already enabled with GitHub Actions as its source.
  • Dependabot updates the site's dependencies (/website, npm).
  • Clean-up. specs/ moves to docs/specs/. The two stub pages docs/credentials.md and docs/node-provisioning.md are removed, and the CHANGELOG's links to them now go to the real pages.
  • Linters. markdownlint allows the README header's HTML, and the frontmatter title no longer counts as a second H1.

Docs that disagreed with the code or were wrong

  • container-labels.md said several Services per container need v0.4.0. They shipped in v0.3.5.
  • files-and-paths.md listed 4 status warnings. The code also writes node-name, service/<svc>, ports/<svc> and control/<svc>, which are now listed.
  • https-certificates.md said the plain-HTTP certificate fix (feature/acme: only refresh certs for HTTPS serve entries tailscale/tailscale#21736) isn't in 1.104.1. It isn't in the now-bundled 1.104.4 either.
  • examples/README.md linked "Tailscale Service" to a page that redirects to the Kubernetes operator's egress docs. It now goes to the Services docs.

The final review also found three statements the rewrite had made inaccurate; all are fixed:

  • which errors end tslink's start retries;
  • what --grant-all-permissions grants;
  • when the Tailscale-App-Capabilities header can be trusted.

Verified

  • go test ./... and golangci-lint run;
  • markdownlint and actionlint;
  • in website/: pnpm lint, fmt:check, check, test:links, build, check-links and check-links --source;
  • the four sample pages and the home page at 375 px in light and dark.

Merging deploys the site.

🤖 Generated with Claude Code

https://claude.ai/code/session_01SYRvoVjhBse7GtgbaHgrFD

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SYRvoVjhBse7GtgbaHgrFD
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SYRvoVjhBse7GtgbaHgrFD
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SYRvoVjhBse7GtgbaHgrFD
An Astro site in website/ that renders docs/ under /tslink/ for GitHub Pages.
The remaining pages get interim frontmatter until they are rewritten.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SYRvoVjhBse7GtgbaHgrFD
Base path for icons, search and every internal link, a tslink home page and icon,
and scripts/check-links.ts for the built site (--source for the Markdown as
GitHub renders it).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SYRvoVjhBse7GtgbaHgrFD
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SYRvoVjhBse7GtgbaHgrFD
The CHANGELOG's links to them now go to the pages they pointed at.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SYRvoVjhBse7GtgbaHgrFD
The status-file warnings now list every key tslink writes, and the
certificate page names the bundled Tailscale 1.104.4 as still lacking the
plain-HTTP fix.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SYRvoVjhBse7GtgbaHgrFD
docs/README.md mirrors the site's navigation, CONTRIBUTING.md says how the
site is built and checked, and the examples link the right Tailscale page.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SYRvoVjhBse7GtgbaHgrFD
docs/README.md mirrors the site's navigation, CONTRIBUTING.md says how the
site is built and checked, the examples link the right Tailscale page, and
the moved specs' links and the linter's exclusion follow the new path.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SYRvoVjhBse7GtgbaHgrFD
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SYRvoVjhBse7GtgbaHgrFD
…ges' links

- architecture: only tslink's own refusals end the retries, not every refused tag
- getting-started: list everything --grant-all-permissions grants
- container-labels: the app-capabilities header is trustworthy only through Serve
- README: host isolation holds by default, not unconditionally
- the site's Markdown pages point links outside the docs at GitHub, and
  check-links now checks them
- pages.yml runs on any Markdown change and never cancels a deploy

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SYRvoVjhBse7GtgbaHgrFD
Biome runs over the whole workspace regardless of FILTER_REGEX_EXCLUDE and
rejected the site's Tailwind CSS; website/biome.json turns it off there, as
oxlint and oxfmt lint the site in pages.yml.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SYRvoVjhBse7GtgbaHgrFD
…tovers

The link checker now keeps a heading's inline code when it works out the
anchor, and ignores href/src inside code. The table of contents, the search
shortcut hint and the theme survive navigation with the client router, the
structured data points at the tslink site, and lastModifiedFor uses the shared
base and runs its git lookups once per build. Code tabs, card tables and the
comments describing cetacean's API, demo and changelog are gone.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SYRvoVjhBse7GtgbaHgrFD
@Radiergummi
Moritz Mazetti (Radiergummi) merged commit c93064d into main Oct 29, 2026
36 checks passed
@Radiergummi
Moritz Mazetti (Radiergummi) deleted the docs/overhaul branch October 29, 2026 21:27
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.

1 participant