Enable comments on a site
Turn on the anchored comments widget for a deployed site, choose an access mode, and read the review feed.
Comments run on any site you own. Enable them and every page gets a floating panel where visitors can highlight any passage and leave a note anchored to that text.
The full model is in Concepts: Comments.
Comments are off by default. A freshly deployed site has no comments
panel until you turn them on — that is the intended state, not a failure or a
permissions problem. Enabling is one command; you never need a browser for it.
Turning comments on or off needs a signed-in CLI (flypod login, or
FLYPOD_TOKEN) for the account that owns the site.
Turn it on
At deploy time
Pass --comments to deploy and enable in one step:
flypod ./dist --commentsAdd --mode to choose a mode other than the default anonymous:
flypod ./dist --comments --mode approvedThis needs a signed-in deploy. An anonymous deploy still succeeds, but comments
stay off and --json says why: "comments_enabled": false with
"comments_skipped": "not_signed_in". Run flypod login (which also claims the
site), then flypod comments enable.
On an existing site
Inside a folder you have deployed from, --site is optional — the CLI uses the
folder's linked site, the same way flypod update and flypod rollback do:
flypod comments enableAnywhere else, name the site:
flypod comments enable --site <site-id>
flypod comments enable --site <site-id> --mode passcode --passcode mysecretIf neither applies, the CLI fails with no_site and names both options rather
than failing quietly.
From the dashboard
The account page has a Comments switch on each site, with a choice of who may comment (Anyone, Passcode, Approved) and a passcode field. It makes the same call the CLI makes. It is a convenience for humans already in a browser, not a fallback for the CLI: if a step ever seems to need the dashboard, that is a bug in the CLI worth reporting.
From a chat app
The flypod MCP connector,
signed in as the site's owner, does the same with configure_comments.
The widget is injected into every HTML response from the site. Static assets, JSON endpoints, and JS bundles are untouched.
The widget loads from the same site host (https://<your-id>.flypod.page/_flypod/widget.js), so there is no third-party origin to add to your CSP.
What visitors see
A Comments button in the bottom-right corner of every page, with a count of open threads. Clicking it opens a panel on the right (a bottom sheet on a phone) that lists every thread on the page in reading order.
Visitors can select any passage to get a Comment button just above the selection. Clicking it opens the panel with a composer and the quoted text at the top; the thread is anchored to that exact passage. Commented passages are highlighted on the page, and clicking a highlight opens its thread.
Inside a thread, visitors can reply, resolve or reopen it, edit their own comment for 15 minutes, copy a link to it, delete their own thread, or report someone else's. Resolved threads collapse behind a Show N resolved toggle. A note that is about the page rather than a passage is one click away in the panel's footer.
Picking a mode
The mode controls who can read and post, and is enforced on the server. Change it from the dashboard, the CLI, or at deploy time.
| Mode | Who can read / post | Right for |
|---|---|---|
| Anonymous | anyone, with a pseudonym | public drafts |
| Passcode | anyone holding the shared passcode (reads + writes gated) | semi-private review |
| Approved | anyone may post, but posts stay hidden until you approve | moderated / high-traffic |
flypod comments enable --site <id> --mode approved
flypod comments mode passcode --site <id> --passcode mysecret
flypod comments off --site <id> # disables the widget (data is preserved)The retired v0.1 mode names still work as input: open maps to anonymous,
and review/members map to approved.
Identity
Each visitor gets a pseudonym scoped to that site, like calm-otter-42. The same person visiting a different flypod site gets a separate identity there — cookies are scoped per subdomain.
Visitors can rename themselves at any time. The new name applies to all their past comments immediately.
Read the inbox
From the CLI
Every verb takes the site from --site (or a leading <site> argument), or
from the folder link:
flypod comments list # open threads, one JSON object per line
flypod comments list --all --json # also --resolved; --page /about.html; --limit N
flypod comments show <thread_id> # a thread with its replies
flypod comments resolve <thread_id>
flypod comments reopen <thread_id>From the dashboard
With comments on, the site's Comments section shows the current mode and a View threads link to the JSON-LD feed below.
As JSON-LD
curl -s https://flypod.dev/api/sites/<id>/comments.json | jqReturns a JSON array of W3C Web Annotations ("type": "Annotation"), one per
visible thread, each with its quoted target, its first comment, and
flypod:status / flypod:page. Add ?page=/about.html for one page.
In Anonymous and Approved modes the feed is public; threads still waiting for approval are left out. In Passcode mode the public feed is empty, so gated comments never leak through it; read them with the CLI as the owner instead.
The comments package also contains its own agent-token (fau_) MCP surface and
webhook primitives. Hosted flypod.dev does not issue those agent tokens or
deliver webhooks yet. See the
comments hosted status. For an agent,
use the CLI or the comment tools on the
flypod MCP connector.
What does not work yet
- Editing after 15 minutes. A visitor can edit their own comment for 15 minutes after posting; after that it is immutable. Owners can edit at any time.
- Webhooks and agent tokens. The underlying primitives exist, but hosted delivery and
fau_token issuance are unfinished. Comment tools on the flypod MCP connector work today with a signed-in session. - Realtime push. Clients poll today.
- Embedding on non-flypod sites. The widget assumes same-origin endpoints under
/_flypod/. Embedding lands in v0.2.
Use with agents & CI
The canonical playbook for driving flypod from an agent or CI job. Covers non-interactive output, capturing the URL, exit codes, authentication, and idempotent re-deploys.
CLI reference
The flypod CLI deploys a static directory or file to a public URL with one command, then manages versions, rollbacks, and account ownership.