An event companion and onboarding experience for the ATmosphere (alpha) atmo.quest
6

Configure Feed

Select the types of activity you want to include in your feed.

README.md

Self-hosted Tap deploy#

Tap is a separate, always-on service that subscribes to the AT Protocol relay, verifies + backfills repos, and streams quest.atmo.connection record events to atmoquest over a private WebSocket. atmoquest's consumer (features/tap/consumer.go) writes the reciprocal connection in real time (or queues it for the target's next login).

It runs as its own Fly app (atmoquest-tap), not part of the main atmoquest deploy. atmoquest works fine without it — the consumer is a no-op unless TAP_WS_ENDPOINT is set, and reciprocity falls back to the login-drain queue.

One-time setup (done out-of-band)#

Run these once, locally, with your Fly org slug:

flyctl apps create atmoquest-tap --org <org-slug>
flyctl volumes create atmoquest_tap_data --app atmoquest-tap --region lax --size 1 --yes
flyctl secrets set TAP_WS_ENDPOINT="ws://atmoquest-tap.internal:2480/channel" --app atmoquest

Tap runs in collection-signal mode, so it auto-discovers every repo that writes a quest.atmo.connection record — no /repos/add calls needed.

Deploying#

Redeploys run on merge/push to main via deploy-tap.yml, alongside the main atmoquest deploy. It just runs flyctl deploy from this directory, so it needs FLY_API_TOKEN in the repo's Tangled settings → secrets. A version bump takes effect by editing INDIGO_VERSION in the Dockerfile and merging to main.

Equivalently, by hand: ( cd deploy/tap && flyctl deploy --remote-only ).

Keeping versions in sync#

deploy/tap/Dockerfile's INDIGO_VERSION must match the github.com/bluesky-social/indigo version in go.mod so the Tap wire format matches what the consumer decodes. Bump both together.

Notes#

  • Networking: Tap has no public service — it's reachable only at atmoquest-tap.internal:2480 on Fly's 6PN network. Don't expose it publicly; /repos/add and the event stream are unauthenticated by default.
  • Always-on: the Fly config defines no services, so the machine never scale-to-zeroes. Tap keeps consuming the firehose and buffers undelivered events in its outbox (at-least-once + acks), so reciprocals survive atmoquest restarts / idle windows.
  • Auth (optional): if you front Tap with an auth proxy, set a bearer token on atmoquest with flyctl secrets set TAP_AUTH_TOKEN=… --app atmoquest.
  • Relay: defaults to Bluesky's relay (relay1.us-east.bsky.network). Override with TAP_RELAY_URL in fly.toml to use a different relay.