The documentation site for Lyno PBX, built with Docusaurus 3.
npm install
npm start # dev server on http://localhost:3000 (no search — see below)
npm run build # production build into build/
npm run serve # serve the production build
npm run typecheckdocs/
intro.md, quick-start.md
concepts/ multi-tenancy, call flow, architecture
configuration/ files and paths, tenants, accounts, trunks
routing/ inbound, outbound, inter-tenant
dialplans/ overview, steps, ring groups, time conditions, audio
operations/ cli, dashboard, configure, docker, nat, troubleshooting
reference/ lyno.yaml, tenant.yaml, extension files
src/
css/custom.css the theme: tokens, navbar, sidebar, tables, code, footer
pages/index.tsx the landing page
sidebars.ts hand-written — reading order matters, so it is not generated
static/img/ Lyno logo, favicon, social card and the telqo footer
wordmark (SVG, no binaries)
Search is offline: @easyops-cn/docusaurus-search-local
builds a Lunr index at build time and ships it as build/search-index.json, so
there is no Algolia account, no crawler and no request leaving the reader's
browser.
The index only exists in a production build. npm start shows no search bar at
all — to try search, use npm run build && npm run serve.
Three things carry navigation, and they are configured in three places:
- the navbar (
docusaurus.config.ts) — quick start, the sidebar, and dropdowns for reference and operations, for readers who already know the name of what they want; - the sidebar (
sidebars.ts) — reading order, concepts first; - category landing pages — every sidebar category is also a page, so its
heading is a link rather than only a collapse toggle. Most are
generated-indexpages (/docs/concepts,/docs/configuration,/docs/routing,/docs/operations,/docs/reference); Dialplans points at its hand-written overview instead. Agenerated-indexslugis relative to the docsrouteBasePath, so it is written/concepts, not/docs/concepts.
- The source is the truth. Every behavioural claim should be checked against
the
lynosource tree, not against older prose. - Never paste real credentials. The source repository's
configs/holds real SIP passwords and a real carrier; examples here use placeholders. - The sidebar is hand-written. A new page needs an entry in
sidebars.ts. - Links are relative
.mdpaths.onBrokenLinksandonBrokenAnchorsare set tothrow, sonpm run buildis the cross-reference check. - Prose pages explain why; reference pages are exhaustive tables. When a fact appears in both, they must agree.
Run /update-docs in Claude Code from either this repository or the lyno
source tree. The full procedure lives in
.claude/commands/update-docs.md.
The telqo house style, taken from telqo.nl: Mulish (800/900) for headings,
Hind Madurai for body text, the brand gradient
(#0f172a → #1e3a8a → #3b82f6) on hero and CTA surfaces, blue-500 accents and
12–16px corners. All tokens are declared at the top of src/css/custom.css;
both colour schemes are defined there, so changing the palette is one block,
not a sweep.
Nothing is fetched at runtime: fonts are self-hosted via @fontsource/mulish
and @fontsource/hind-madurai, and every image is a local SVG.
showLastUpdateTimeis commented out indocusaurus.config.ts; enable it once this directory has at least one commit.urlandbaseUrlindocusaurus.config.tsare placeholders — set them to the real hostname before deploying.