Synchronize an owned Bluesky account directly into the profile feed #29

Open
opened 2026-09-28 16:55:37 +00:00 by Michael Westergaard · 0 comments
Owner

Goal

Import public posts from a Bluesky account that the FediProfile user proves they control, then publish them to the user's ActivityPub followers. Use Bluesky's public AppView reads directly; no Bridgy bridge, full AT Protocol node, firehose, or reverse sync.

Acceptance

  • Accept a Bluesky handle/profile URL, resolve and store the stable DID, and verify control with a one-time challenge in the Bluesky profile before enabling import. Do not equate a publicly readable feed with ownership. Handle later handle changes without duplicating the source.
  • Read the public author feed incrementally, with pagination and a bounded initial backfill. Define and test the scope of original posts, replies, and reposts explicitly; do not silently import another author's repost as an owned post.
  • Normalize post URI/CID, text, facets/links, timestamps, embeds/media metadata, and original URL through #25; publish with provenance through #26. Do not mirror private content or binary media by default.
  • Deduplicate across repeated pages/polls and recover from rate limits, outages, edits, and handle changes. Absence from a bounded feed page is not proof of deletion; retract only on a reliable deletion signal or explicit source removal policy.
  • Unit tests use Bluesky-shaped API fixtures for verification, pagination, updates, duplicates, replies/reposts, embeds, and failures. Keep live interoperability tests outside commit CI.

Depends on #25 and #26. Public API reference: https://docs.bsky.app/docs/api/app-bsky-feed-get-author-feed

## Goal Import public posts from a Bluesky account that the FediProfile user proves they control, then publish them to the user's ActivityPub followers. Use Bluesky's public AppView reads directly; no Bridgy bridge, full AT Protocol node, firehose, or reverse sync. ## Acceptance - Accept a Bluesky handle/profile URL, resolve and store the stable DID, and verify control with a one-time challenge in the Bluesky profile before enabling import. Do not equate a publicly readable feed with ownership. Handle later handle changes without duplicating the source. - Read the public author feed incrementally, with pagination and a bounded initial backfill. Define and test the scope of original posts, replies, and reposts explicitly; do not silently import another author's repost as an owned post. - Normalize post URI/CID, text, facets/links, timestamps, embeds/media metadata, and original URL through #25; publish with provenance through #26. Do not mirror private content or binary media by default. - Deduplicate across repeated pages/polls and recover from rate limits, outages, edits, and handle changes. Absence from a bounded feed page is not proof of deletion; retract only on a reliable deletion signal or explicit source removal policy. - Unit tests use Bluesky-shaped API fixtures for verification, pagination, updates, duplicates, replies/reposts, embeds, and failures. Keep live interoperability tests outside commit CI. Depends on #25 and #26. Public API reference: https://docs.bsky.app/docs/api/app-bsky-feed-get-author-feed
Sign in to join this conversation.
No labels
No milestone
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
klafbang/fediprofile#29
No description provided.