The public website for Sendra, a terminal-native HTTP client, a "CLI Postman" written in Rust. This repo holds the marketing/landing site and documentation, built with Docusaurus; it does not contain any of the Sendra CLI's source code, which lives in the main sendra repo.
This is currently a bare Docusaurus scaffold — landing page content and blog
content are added in later issues. The reference docs, however, are real:
they're synced in from the sendra
repo's own docs/ directory (see Docs sync below).
# install dependencies
pnpm install
# pull the latest reference docs from sendra (see "Docs sync" below) —
# required once before the first `pnpm start`/`pnpm build`, since
# docs/cli/ is generated and gitignored
pnpm sync-docs
# start the local dev server (http://localhost:3000)
pnpm start
# build the static production site into ./build
pnpm build
# serve the production build locally
pnpm servemain is protected; branch from dev and open pull requests against dev,
not main. See CONTRIBUTING.md for the full workflow.
docs/cli/ is not hand-written — it's generated by
scripts/sync-docs.ts (pnpm sync-docs), which pulls
docs/reference.md, docs/reference/*.md and docs/decisions/*.md from the
sendra repo, adds the Docusaurus front matter they don't carry (id, title,
sidebar_position, the last derived from the order sendra's own
docs/reference.md/docs/decisions/README.md list their topics in), and
rewrites their internal links into Docusaurus doc routes (or, for links that
point outside docs/ — source files, CONTRIBUTING.md, the root
README.md — into github.com links at the synced commit, since that
content isn't pulled in).
It's scoped entirely to docs/cli/, which it wipes and regenerates on every
run, so it never touches hand-written docs living elsewhere under docs/
(e.g. docs/intro.md), and re-running it never leaves stale
files behind from a previous sync.
Live tracking: the sync resolves sendra's main branch HEAD via the
GitHub API at the start of every run — there's no pinned commit SHA to bump.
This is deliberate: a notify-docs-site workflow in the sendra repo POSTs to
this site's Vercel deploy hook on every push to sendra's main that touches
docs/, with no review step in between, so the sync needs to pick up
whatever just landed on main rather than re-syncing a stale pin. The
tradeoff is that an unrelated-looking sendra main push can change or break
a sendra-web build if it touches docs/ or the sync's assumptions about doc
structure — there's no reviewed pin standing between the two repos anymore.
SENDRA_DOCS_REF overrides the ref (a branch, tag, or commit) for local
testing without editing the file.
CI (.github/workflows/ci.yml) runs pnpm sync-docs and pnpm build on
every push/PR, so a sendra-side docs change that breaks the transform, or a
build error caused by newly-synced content, fails visibly on the PR — though
because the ref is resolved live, a CI run against this same commit can still
diverge from what shipped at deploy time if sendra's main moved in between.
The sync reads the public sendra repo over the GitHub API unauthenticated by
default; set the SENDRA_DOCS_TOKEN repo secret (a fine-grained PAT with
read-only access to sendra-lab/Sendra) if syncs start hitting GitHub's
unauthenticated rate limit.
Versioning: this site is still deliberately unversioned — a single
"current" doc set, Docusaurus's default with no versions config at all.
Sendra has cut its first tagged release (v0.1.0),
so there's now a real release boundary to version against, but
scripts/sync-docs.ts still tracks sendra's live main HEAD rather than
that tag (see "Live tracking" above), so docs/cli/ reflects the latest
unreleased docs, not the v0.1.0 snapshot. Turning on docusaurus docs:version is meaningful now, but it's a bigger change than the sync
alone: it'd mean deciding whether the sync should move from tracking main
to tracking the latest tag, and whether every future sendra release gets its
own versioned snapshot here. Revisit deliberately rather than as a side
effect of another change.