Skip to content
flypod
Guides

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 --comments

Add --mode to choose a mode other than the default anonymous:

flypod ./dist --comments --mode approved

This 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 enable

Anywhere else, name the site:

flypod comments enable --site <site-id>
flypod comments enable --site <site-id> --mode passcode --passcode mysecret

If 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.

ModeWho can read / postRight for
Anonymousanyone, with a pseudonympublic drafts
Passcodeanyone holding the shared passcode (reads + writes gated)semi-private review
Approvedanyone may post, but posts stay hidden until you approvemoderated / 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 | jq

Returns 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.

On this page